******声明: 本文转载自 作者:FD-Do 原文:https://blog.csdn.net/kunfd/article/details/52463672
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)
作者:FD-Do
来源:CSDN
原文:https://blog.csdn.net/kunfd/article/details/52463672
版权声明:本文为博主原创文章,转载请附上博文链接!