IO流之字节流
FileInputStream
基本使用方法
运行结果:
FileOutputStream
基本使用方法:
FileOutputStream fos = new FileOutputStream("yyy.txt"); // 如果该文件存在就清空,如果不存在就创建
fos.write(97);
fos.write(98);
fos.write(99);
运行结果:文件中的内容为abc
如果想在文件的末尾追加内容,而不是清空重新写入,只需在构造方法中传入一个true即可
FileOutputStream fos = new FileOutputStream("yyy.txt",true);
拷贝
方法一:
这中拷贝方法不推荐,因为它是将字节逐个读取,然后逐个写入,当文件较大时效率太低。
方法二:
available()方法可以一次获取到文件的所有字节个数,这样可以一次性将问价拷贝,但当文件过大时,内存会溢出,这种拷贝方法也不推荐。
方法三:定义一个小数组
方法四:使用BufferedInputStream和BufferedOutputStream进行拷贝:
原理:
BufferedInputStream内置了一个缓冲区(大小为8192的数组),从BufferedInputStream中读取一个字节时, BufferdeInputStream会从文件(硬盘上)中一次读取8192个字节,存入缓冲区(内存中),程序再次读取时,直接从缓冲区中读取(一个一个读取),而不用从文件中读取,因为缓冲区在内存中,所以一个一个读取时也比直接从文件中一个一个读取要快;
BufferedOutputStream也内置了一个缓冲区(大小为8192的数组),程序向流中写出字节时,不会直接写到文件,而是先写到缓冲区,直到缓冲区写满,再一次写到文件。
字节流读写中文
1、字节流读中文:
字节流读中文时,因为编码方式的不同,定义的数组大小就要不同,不然会出现乱码,例如我用的是UTF-8,所以数组大小可以定义为3的倍数,但是,即使这样,也会出现乱码,因为可能有标点,所以读中文用字符流,如果非要用字节流,就要用内存输出流即ByteArrayOutputStream。
2、字节流写中文:
字节流写中文是不会出现乱码,但要注意代码的编码方式要和zzz.txt文件的编码方式保持一致。
字符流文章链接:http://blog.csdn.net/striverli/article/details/53980602
内存输出流文章链接:http://blog.csdn.net/StriverLi/article/details/57074708

浙公网安备 33010602011771号