IO流
IO流分字节流、字符流,输入流、输出流,节点流和处理流。
)
输入流和输出流的区别
它们都是流只是方向不同而已。对于程序本身而言向内读取数据是输入流,向外输出数据是输出流。
字节流和字符流的区别
字节流和字符流主要的区别是处理方式上的不同。
字节流
字节流是最基本的,它采用ASCLL编码,主要处理二进制数据,它是按字节来处理的。字节流在操作文件时是直接操作文件本身的。
字符流
字符流,采用Unicode编码,它是按虚拟机的Encode来处理的,也就是需要进行字符集的转化。字符流会有一个缓存区先把数据输出到缓存区中然后再从缓存区一段一段的输出进文件中。
字节流和字符流的选择
因为流主要是应用于数据的传输和网络编程,而图片和视频等都是️以二进制数据进行传输的。所以如果是纯文本处理的话优先考虑字符流,其它的使用字节流。
节点流和处理流
节点流:直接向文件输入或输出数据。如FileInputStream。
处理流:在已有的节点流进行包装使其变得更为强大的流。如DataInputStream。
源文件和目标文件的大小不同
当我们写一个简单的Java copy程序的时候,我们输入的源文件和输出的目标文件大小不同,这可能是你用了read(byte[])
方法,最后一次读写不够这个数组的大小所造成的。我们可以用read(byte[],0,len)
来解决。
缓存区应该设多大?
缓存区并不是越大越好,它应该设多大和CUP、内存都有关系,所以这个问题没有具体答案因为每个人的计算机不同。不过我们可以参考BufferedInputStream中的默认缓存区大小8192。