字节流和字符流的区别,以及对象的使用。

1.首先先区分一下字符和字节

a.字节就是计算机存储信息的基本单位,01010101011101

b.字符是指一个符号占多少个字节,比如一个汉字占两个字节,一个英文标点占一个字节................

2.再者java中流的概念

其实就是一个抽象的概念,把数据的流动比作是流动的水,其实就是数据的输入和输出而已就好比水库的进水和出水。流按照分类可以分为字节流和字符流(或者输入流和输出流。)

3.操作对象

字符流操作对象   a. 纯文本                                          b.需要查指定的编码表,默认为GBK

字节流操作对象   a. 图像,音频等多媒体文件          b.无需查询指定编码表

4.类

字符流:Reader/Writer以及对应的子类(FileWriter/FileReader,   BufferedWriter/BufferedReader.........)

字节流:InputStream/OutputStream以及对应的子类(FileInputStream/FileOutputStream,BufferedInputStream/BufferedOutputStream(继承于InputStream/OutputStream的FilterInputStream/FileterOutputStream)...........)

5.如何选择合适的流

a.先明确源头和目的:源头使用的是输入流,InputStream或者Reader。目的使用的是输出流,OutputStream或者Writer

b.确定操作的对象是那些:纯文本用字符流,否则用字节流

c.当明确后,再确定使用哪一个具体的对象:内存,硬盘(比如操作文件的话用FileWriter/FileReader,或者FileInputStream/FileOutputStream),控制台(System)

举个栗子

你的要求是想   把一个纯文本文件copy到另一个文件中

a.源头——b.Reader——c.FileReader(如果要提高效率的话,可以选择缓冲流BufferedReader)

b.目的——b.Writer——c.FileWriter(如果要提高效率的话,可以选择缓冲流BufferedWriter)

6.字节流和字符流的相互转换

a. InputStreamReader 是字节流通向字符流的桥梁(此方法还涉及到编码表的知识)

b. 从字符流到字节流:可以从字符流中获取char[]数组,转换为String,然后调用String的API函数getBytes() 获取到byte[],然后就可以通过ByteArrayInputStream、ByteArrayOutputStream来实现到字节流的转换。(引用http://www.cnblogs.com/hnrainll/archive/2012/03/22/2412455.html)


猜你喜欢

转载自blog.csdn.net/kunfd/article/details/52463672