使用BufferedReader和BufferedWriter复制文件时遇到的一点问题
来源:互联网 发布:类似猴赛雷的网络热词 编辑:程序博客网 时间:2024/05/10 09:18
问题描述: 在使用BufferedReader和BufferedWriter来操作文件的复制时发现复制的文件经常性的会减少一部分字节数
代码如下:
public class DemoClientFile {
public static void main(String[] args) throws UnknownHostException, Exception {
Socket socket=new Socket("10.0.158.50",5555);
File file=new File("C:\\Documents and Settings\\Administrator\\桌面\\第四周\\2015-11-20(IO流)周五\\pro\\gentleman.mp3");
String str=file.getName();
System.out.println(str);
BufferedWriter bwName=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bwName.write(str);
bwName.newLine();
bwName.flush();
OutputStream fo=socket.getOutputStream();
FileInputStream fos=new FileInputStream(file);
byte[] b=new byte[1024];
int len=0;
while((len=fos.read(b))!=-1){
fo.write(b, 0, len);
}
socket.shutdownOutput();
fos.close();
socket.close();
}
}
public class DemoServerFile {
public static void main(String[] args) throws Exception {
ServerSocket ss=new ServerSocket(5555);
Socket socket=ss.accept();
BufferedReader brName=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String fileName=brName.readLine();
File file2=new File("c:\\cc",fileName);
InputStream is=socket.getInputStream();
byte[] b=new byte[1024];
int len=0;
FileOutputStream fos=new FileOutputStream(file2);
while((len=is.read(b))!=-1){
fos.write(b, 0, len);
}
fos.close();
}
}
仔细观察发现以下情况:
第一次读取的文件名为:a1.mp4
大小为:4,819,761字节
复制后的大小为: 4,803,385字节
相差: 0,016,376字节
第二次读取的文件名为:gentleman.mp3
大小为:3,182,700字节
复制后的大小为: 3,166,331
相差:0,016,369字节
然后我在BufferedReader和BufferedWriter里面都发现了这样一行代码: private static int defaultCharBufferSize = 8192;
8192表示的是字符的长度,一个字符是2个字节即缓存流一次性读取的字节数为8192*2=16384
16384刚好是上面文件相差字节数+文件名字节数+2
16384=0,016,376+6+2
16384=0,016,369+13+2
那这个多余的2个字节又是什么呢?我发现我写了这样一行代码: bwName.newLine();
这行代码表示写一个换行符过去,一个换行符在Java中是'\r''\n'刚好2个字节!
所以在操作文件流的时候尽量避免使用缓存流,非文本文件也要尽量避免使用字符流!
- 使用BufferedReader和BufferedWriter复制文件时遇到的一点问题
- 编写方法,完成指定文件的复制和剪切;使用BufferedReader和BufferedWriter完成。
- Socket使用BufferedReader和BufferedWriter读不到数据的问题
- 利用BufferedReader 、BufferedWriter 复制文件
- BufferedReader和BufferedWriter使用
- bufferedReader和bufferedWriter的执行读写文件
- 使用高效缓冲流BufferedReader/BufferedWriter实现文件复制
- JAVA-IO流中缓存区的使用(BufferedReader和BufferedWriter)以及复制内容
- 使用缓冲功能的BufferedReader和BufferedWriter复制文本文件,按照行读写
- java 使用BufferedReader、BufferedWriter实现文本文件的复制;
- 利用 BufferedReader 和 BufferedWriter 完成文本文件的复制
- BufferedReader和BufferedWriter读写文件
- BufferedReader和BufferedWriter读写文件
- BufferedReader BufferedWriter 中文下复制copy文件
- 使用Java中的BufferedReader、BufferedWriter复制文本文件
- 使用BufferedReader和BufferedWriter按行读写文件
- 使用BufferedReader和BufferedWriter按行读写文件
- 使用BufferedReader和BufferedWriter按行读写文件
- Lua封装增加CCLabel接口
- Android页面跳转动画效果
- 3D中的OBJ文件格式详解
- UIWindow简单介绍
- C/C++中的函数参数传递机制(zz)
- 使用BufferedReader和BufferedWriter复制文件时遇到的一点问题
- SLAM 网址汇总
- Android最火的快速开发框架AndroidAnnotations使用详解
- 五大常用算法
- 外部排序-合并排序
- AngularJS与RequireJS集成
- 使用openshit在ubuntu14.04下一键部署openstack(juno版本)
- 铁科院半个月总结
- hdu1995--汉诺塔V