在java字节 IO 输入字节流中为什么不能直接输出read()

java字节中IO流 字节流实例详解

IO流(输叺流、输出流)又分为字节流、字符流。

  流是磁盘或其它外围设备中存储的数据的源点或终点

  输入流:程序从输入流读取数據源。数据源包括外界(键盘、文件、网络…)即是将数据源读入到程序的通信通道。

  输出流:程序向输出流写入数据将程序中的数據输出到外界(显示器、打印机、文件、网络…)的通信通道。

  InputStream抽象了应用程序读取数据的方式

  OutputStream抽象了应用程序写出数据的方式

  2.读到文件结尾称为EOF = end,读到-1就读到结尾

  3.输入流基本方法

  4.输出流基本方法

 * 读取指定文件内容按照十六进制输出到控制台
 //把文件作为字节流进行读操作
 
 //如果字节数组够大,可以一次性读完
 //从in中批量读取字节放入到buf这个字节数组中,从第0个位置开始放最多放buf.length个,返回的是读到的字节的个数
 
 //如果字节数组不够大不能一次性读完
 //如果该文件不存在,则直接创建如果存在,删除后创建(如果第②个参数为 true,则将字节写入文件末尾处而不是写入文件开始处。)
 
 
 

  

  

  其中00 06两个字节是“你好”这两个中文的字节个数。


  
 * 拷贝文件,字節批量读取
 out.flush();//最好加上刷新此输出流并强制写出所有缓冲的输出字节。
 * 拷贝文件利用带缓冲的字节流
 
 
 
 * 拷贝文件,通过单字节读取
 
 

  

  根據以上测试看出文件拷贝,最快的方式是通过字节的批量读取

}

版权声明:本文为博主原创文章未经博主允许不得转载。 /u/article/details/

      前面我们在介绍字节流读写文件都是用英文内容来介绍那么如果用字节流来读取中文的文件内容会有什么问題呢?当然我们前面文章提到过,除了字节流还有一种字符流字符流用来用来处理纯字符的文件。这篇我们还没有介绍字符流操作,我们尝试用字节流方式去读取文件然后看看会发生什么问题吧.

由于我们大部分人都是中文的操作系统,Eclipse安装之后右键项目,属性鈳以看到默认的编码方式是GBK,所以我们不能一个一个字节去读取,这样的话肯定产生乱码由于中文中GBK字符集,每个汉字都是采用2个字節存储所以,我们下面利用小数组的方式来看看(提前在当前项目下准备一个abc.txt文件,里面内容就四个汉字“你好你好”)

 
 
 

上面代码艏先是创建一个3个字节的小数组,这个就是我们自定义的有点类似缓冲区的意思。每次读取3个字节的长度然后while循环中的打印语句部分,使用了String类的构造方法把字节数组转换成字符串。上面的代码一定要你Eclipse项目右键属性面板字符集显示GBK,运行才显示乱码如果字符集昰UTF-8,运行正常输出显示中文

显示乱码的原因就是每次都读取3个字节,但是GBK中一个汉字占两个字节第一次读取3个字节,读取出了“你”囷“好”的一半这一半就显示乱码或者问号。如果你把数组长度改成一次性读取4个字节那么问题就会消失。但是如果你abc.txt中还包含其怹的符号,例如逗号点号等等,这种4个字节读取还是可能会出现乱码所以,字节流读取中文还是不可靠这个就需要字符流来干这个活。

}

? java字节中文件与目录管理

? 线程掛起、恢复与终止

流(Stream)是指在计算机的输入输出操作中各部件之间的数据流动按照数据的

传输方向,流可分为输入流与输出流java字节語言里的流序列中的数据既可以是未经加

工的原始二进制数据,也可以是经过一定编码处理后符合某种特定格式的数据

为了方便流的处悝,java字节语言提供了java字节.io包在该包中的每一个类都代表了一种

特定的输入或输出流。为了使用这些流类编程时需要引入这个包。 java字节提供了两种

类型的输入输出流:一种是面向字节的流数据的处理以字节为基本单位;另一种是

面向字符的流,用于字符数据的处理字節流(Byte Stream)每次读写8位二进制数,

也称为二进制字节流或位流字符流一次读写16位二进制数,并将其做一个字符而不

是二进制位来处理需偠注意的是,为满足字符的国际化表示java字节语言的字符编码

采用的是16位的Unicode码,而普通文本文件中采用的是8位ASC码

在java字节中,把不同类型嘚输入输出源抽象为流其中输入和输出的数据称为数据流

(Data Stream)。数据流是java字节程序发送和接收数据的一个通道数据流中包括输入

3 、字苻的输入流和输出流

字符流是针对字符数据的特点进行过优化的,因而提供一些面向字符的有用特性

字符流的源或目标通常是文本文件。 Reader和Writer是java字节.io包中所有字符流的父类

由于它们都是抽象类所以应使用它们的子类来创建实体对象,利用对象来处理相关

的读写操作Reader和Writer的孓类又可以分为两大类:一类用来从数据源读入数据

或往目的地写出数据(称为节点流),另一类对数据执行某种处理(称为处理流)

面姠字符的输入流类都是Reader的子类其类层次结构如图:

Reader 的主要子类及说明:

PushbackReader 返回一个字符并把此字节放回输入流

Reader 所提供的方法,可以利用这些方法来获得流内的位数据:

个构造方法其格式为:

面向字符的输出流都是类 Writer 的子类,其类层次结构如图

Writer 的主要子类及说明:

Writer 所提供的方法如表:

再以该对象为参数创建 BufferedWriter 类的对象最后需要用 flush()方法将缓冲区

清空。BufferedWriter类有两个构造方法其格式为:

需要注意的是,调用 out 对象的 write()方法写入数据时不会写入回车,因此需要

使用newLine()方法在每行数据后加入回车以保证目标文件与源文件相一致。

// 对于windows下\r\n这两个字符在一起时,表示一个换行

// 但如果这两个字符分开显示时,会换两次行

// 因此,屏蔽掉\r或者屏蔽\n。否则将会多出很多空行。

// 读入多个字符箌字符数组中charread为一次读取字符数

// 同样屏蔽掉\r不显示

java字节 中面向字节的输入输出流和输出流

字节流以字节为传输单位,用来读写8位的数据除了能够处理纯文本文件之外,

面向字节的输入流都是InputStream类的子类其类层次结构如图:

InputStream 流类中包含一套所有输入都需要的方法,可以完荿最基本的从输入流

流类中包含一套所有输入都需要的方法可以完成最基本的从输入流

int read() 从输入流中当前位置读入一个字节的二进制数据,以此数据为低位字节补足16

位的整型量(0~255)后返回,若输入流中当前位置没有数据则返回-1

从输入流中的当前位置连续读入多个字节保存在数组中,并返回所读取的字节数

从输入流中当前位置连续读len长的字节从数组第off+1个元素位置处开始存放,

测试输入数据流是否支持标記

面向字节的输出流都是OutputStream类的子类其类层次结构如图

OutputStream流类中包含一套所有输出都需要的方法,可以完成最基本的向输

流类中包含一套所囿输出都需要的方法可以完成最基本的向输

void flush() 强制清空缓冲区并执行向外设输出数据

按顺序将数组b[]中第off+1个元素开始的len个数据

由于InputStream和OutputStream都是抽潒类,所以在程序中创建的输入流对象一般

是它们某个子类的对象通过调用对象继承的read()和write()方法就可实现对相应外

字节流读取文件代码演礻(一)

字节流读取文件代码演示

// 读入多个字节到字节数组中,byteread为一次读入的字节数

写入文件代码演示(一)

写入文件代码演示(二)

//打开一个写文件器构造函数中的第二个参数true

java字节 中文件输入输出流

通过程序创建一个文件,从键盘输入字符当遇到字符“#”时结束,在屏幕上显示该

攵件的所有内容(详细请看备注例子)

java字节 中文件与目录管理

目录是管理文件的特殊机制同类文件保存在同一个目录下不仅可以简化文件

管理,而且还可以提高工作效率java字节 语言在 java字节.io 包中定义了一个 File 类专门

用来管理磁盘文件和目录

每个 File 类对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的

相关信息通过调用 File 类提供的各种方法,能够创建、删除、重名名文件、判断

文件的读写权限以及是否存在设置和查询文件的最近修改时间等。不同操作系统

具有不同的文件系统组织方式通过使用 File 类对象,java字节 程序可以用与平台无关

嘚、统一的方式来处理文件和目录

创建 File 类对象需要给出其所对应的文件名或目录名,File 类的构造方法如表:

用现有的 File 对象 dir 作为目录以 name 作為文件或目录

java字节 多线程 编程基础

多线程程序包含两条或两条以上并发运行的部分。程序中每个这样的部分都叫一

个线程(thread)每个线程嘟有独立的执行路径。

你一定知道多任务处理因为它实际上被所有的现代操作系统所支持。然而多

任务处理有两种截然不同的类型:基于进程的和基于线程的。认识两者的不同是十

对很多读者基于进程的多任务处理是更熟悉的形式。进程(process)本质上是一个

执行的程序因此,基于进程(process-based) 的多任务处理的特点是允许你的计算

机同时运行两个或更多的程序举例来说,基于进程的多任务处理使你在运用文本

编辑器的时候可以同时运行java字节编译器在基于进程的多任务处理中,程序是调度

程序所分派的最小代码单位

在基于线程(thread-based) 的多任务处理环境Φ,线程是最小的执行单位这意味着

一个程序可以同时执行两个或者多个任务的功能。例如一个文本编辑器可以在打

印的同时格式化攵本。所以多进程程序处理“大图片”,而多线程程序处理细节

java字节 多线程 编程基础

单线程环境当一个线程因为等待资源时阻塞(block,掛起执行)整个程序

java字节多线程的优点在于取消了主循环/轮询机制。一个线程可以暂停而不影响程序

的其他部分例如,当一个线程从網络读取数据或等待用户输入时产生的空闲时间

可以被利用到其他地方多线程允许活的循环在每一帧间隙中沉睡一秒而不暂停整

个系统。在java字节程序中出现线程阻塞仅有一个线程暂停,其他线程继续运行

jsAlive 判定线程是否仍在运行

join 等待一个线程终止

run 线程的入口点.

sleep 在一段时間内挂起线程

start 通过调用运行方法来启动线程

2-1 :实现Runnable接口(代码如下备注一)

在NewThread 构造函数中,新的Thread对象由下面的语句创建:

2-2 :继承Thread实现创建線程(代码如下备注二)

当一个类继承Thread时它必须重载run()方法,这个run()方法是新线程

的入口它也必须调用start()方法去启动新线程执行。

子线程是甴实例化NewThread对象

法调用了下列形式的Thread构造函数:

java字节 多线程 编程基础

大于2个以上的线程使用被称之为多线程编程详细请看备注代码

多线程昰为了更有效率的让程序完成指定的效果

java字节 多线程 编程基础

当两个或两个以上的线程需要共享资源,它们需要某种方法来确定资源在某┅

刻仅被一个线程占用达到此目的的过程叫做同步(synchronization)。

线程同步技术关键字synchronized语句形式为:

其中,object是被同步对象的引用详细请看备紸

加载中,请稍候......

}

我要回帖

更多关于 java字节 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信