java I/O流:字节流和字符流(概要及其方法)

**

java I/O流:字节流和字符流(概要及其方法)

**

IO流按照操作数据的不同可分为字节流和字符流。按照数据传输方向的不同又可以分为输入流和输出流。程序从输入流中读取数据,向输出流中写入数据。
在IO包中,字节流的输入/输出流分别用java.io.Reader和java.io.Writer表示。

- [ 一] 字节流
针对字节输入、输出提供的一系列流。 文本、图片、音频和视频都是以字节的形式存在的,因此要对这些内容进行传输就要使用字节流。
两个抽象类:InputStream(字节输入流 )、OutputStream(字节输出流)。 它们是字节流的两个顶级父类,字节输入流都是InputStream的子类,字节输出流都是OutputStream的子类。

  • InputStream的常用方法

int read() : 从输入流中读取数据的下一个字节。

int read(byte[] b): 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。

int read(byte[]b , int off,int len): 从输入流中读取若干字节,把它们保存到参数b指定的字节数组中,off指定字节数组开始保存数据的起始下标,len表示读取的字节数目

void close() : 关闭此输入流并释放与该流关联的所有系统资源。

  • OutputStream的常用方法:

void write(int b) : 将指定的字节写入次输出流。

void write(byte[] b) : 将b.length个字节从指定的byte数组写入此输出流。

void write(byte[] b , int off ,int len) : 将指定byte数组中从偏移量off开始的len个字节写入此输出流。

void flush() : 刷新此输出流并强制写出所有缓冲的输出字节。

void close(): 关闭此输出流并释放与该流关联的所有系统资源。

注意: 输出主要方法是write 而输入的主要方法是read。

  • 字节流操作文件
    针对文件的读写,JDK专门提供了两个类 : FileInputStream和 FileOutputStream 。它们分别包括了一套是所有输入与输出需要使用的方法,可以完成最基本的读取与写出功能。
    通过FileOutputStream 向一个已经存在的文件中写入数据,该文件中的数据会被清空,如果希望追加数据,只需要在字节输入流的末尾追加一个参数值true即可。
    (注意:一旦遇到I/O异常 ,IO流的close方法将无法得到执行,流对象所占用的系统资源
    将无法释放,因此,为了保证IO流的close()方法必须执行,通常将关闭流的操作写在finally代码块里。)

字节流缓冲区:为了提高单个字节的读、写效率,可以使用字节流缓冲区,即定义一个字节数组作为缓冲区,复制文件时,可以将读取的单个字节保存到字节数组中,然后将字节数组中的数据一次性写入文件中。

字节缓冲流:提高读写效率除了使用字节流缓冲区,还可以使用java.io包中自带缓冲功能的字节缓冲流,它们分别是BufferedInputStrem 和BufferedOutputStream。这两个流在实例化的时候需要接受InputStream和OutputStream类型的对象作为参数。
例如:

BufferedInputStream bufferInput = new BudderedInputStream(new FileInputStream("source\河马.jpg"));
BufferedOutputStream bufferOutput = new BudderedOutputStream(new FileOutputStream("source\河马.jpg"));
while((lenth = bufferInput.read()) != -1){
	bufferOutput.write(lenth);
}

这两者提高程序指向效率几乎相同。

- [ 二] 字符流
字符流有两个抽象的顶级父类: Reader 和Writer 。 Reader是字符输入流,从某个源设备读取字符; Writer是字符输出流,用于向某个目标设备写入字符。

在程序开发中,经常需要读取文本文件的内容,如果要从文件中直接读取字符,便可以使用字符输入流FileReader,通过此流可以从关联的文件中读取一个或一组字符。

FileReader / FileWriter 用于读/写文件, BufferedReader 和 BufferedWriter 是具有缓冲功能的流 使用它们可以提高读、写效率。(注意:字符缓冲流内部使用了缓冲区,字符写入缓冲区时,当缓冲区填充不下或者调用close()方法时,缓冲区的字符才会一次性写入目标文件中。因此在循环结束时一定要调用close()方法,否则很容易会导致缓冲区的部分数据无法写入目标文件中。)

字符流Reader的常见方法:
read():读取单个字符。

read(char[] buf) :将字符读入数组。

read(char[] buf, int off, int len) : 将字符读入数组的某一部分。

read(CharBuffer target) :试图将字符读入指定的字符缓冲区。

flush() :刷新该流的缓冲。

close() :关闭此流。(需要先刷新它)

字符输出流Writer主要方法:
write(char[] buf) :写入字符数组。

write(char[] buf, int off, int len) :写入字符数组的某一部分。

write(int c) :写入单个字符。

write(String str) :写入字符串。

write(String str, int off, int len) :写入字符串的某一部分。

flush() :刷新该流的缓冲。

close() :关闭此流。(需要先刷新它)

- [ 三] 转换流
字节流和字符流相互的转换,java.io包中提供了两个类可以将字节流转换为字符流 : InputStreamReader 和 OutputStreamWriter。
使用转换流可以在一定程度上避免乱码,还可以指定输入输出所使用的字符集。
OutputStreamWriter 是Writer的子类,将一个字节输出流转换成字符输出流,方便直接写入字符。
InputStreamReader 是Reader 的子类,讲一个字节输出流转换成字符输入流,方便直接读取字符。
一般为了提高读/写效率,常通过字符缓冲流实现转换的操作。(注意:在使用转换流时,只能针对操作文本文件的字节流进行转换,如果字节流操作的是图片或者音频,此时转换为字符流就会造成数据丢失。)
OutputStreamWriter的常见方法:
flsh():刷新该流的缓冲

close():关闭此流,关闭前需要刷新

getEncoding():获取此流使用的字符编码的名称。

(1)write():write(char[] ,int offset ,int length):写入字符数组的某一部分

(2)write(String ,int offset ,int length):写入字符串的某一部分

(3)write(String ):写入单个字符

InputStreamReader的常见方法:
close(): 关闭此流

getEncoding(): 获取此流使用的字符编码的名称

ready(): 判断此流是否已经准备好用于读取

read(): 读取单个字符。

read(char[],int offset ,int length),将字符读入数组的某一部分

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值