java 写入缓存_java读写文件小心缓存数组

一般我们读写文件的时候都是这么写的,看着没问题哈。

public static void main(String[] args) throws Exception {

FileInputStream fileInput = new FileInputStream("e://test1.txt");

FileOutputStream fileOutput = new FileOutputStream("e://test2.txt");

byte[] buffer = new byte[4];

while(fileInput.read(buffer) != -1){

fileOutput.write(buffer);

System.out.println(new String(buffer));

}

fileInput.close();

fileOutput.close();

System.out.println("complete");

}

6186038.html

9d4c11a91ff094115c69d66b760d95b2.png

6186038.html

写的文件多了234.。。。这是为什么呢。。。

6186038.html

6186038.html

d02dcd15da54c2f50fa61a07c54d553a.png

6186038.html

6186038.html

text1.txt里面的内容为“中国12345”,一共占9个字节。

byte[]数组长4个字节,循环第三次的时候只读取一个字节,但是第二次循环遗留下来的数据

还在数组里面,并没有清空。

6186038.html

38f90c3b54cf4562dc4d98cb17d84c0d.png

所以正确的写法如下:

byte要初始化一下

6186038.html

7841458494e74a6bc701d6a7b832e22e.png

public static void main(String[] args) throws Exception {

FileInputStream fileInput = new FileInputStream("e://test1.txt");

FileOutputStream fileOutput = new FileOutputStream("e://test2.txt");

byte[] buffer = new byte[4];

while(fileInput.read(buffer) != -1){

fileOutput.write(buffer);

System.out.println(new String(buffer));

buffer = new byte[4];

}

fileInput.close();

fileOutput.close();

System.out.println("complete");

}

后来发现这样更好:

public static void transFile() throws Exception{

FileInputStream fileInput = new FileInputStream("e://test1.txt");

FileOutputStream fileOutput = new FileOutputStream("e://test2.txt");

byte[] buffer = new byte[4];

int count = 0;

while((count = fileInput.read(buffer)) != -1){

fileOutput.write(buffer,0,count);

}

fileInput.close();

fileOutput.close();

System.out.println("complete");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值