字符流(拷贝图片)

来源:互联网 发布:淘宝刷差评多少钱一单 编辑:程序博客网 时间:2024/05/17 00:07

字符流_FileReader和FileWriter拷贝一张图片(会出错的原因)。

字节流可以拷贝视频和音频等文件,那么字符流可以拷贝这些吗?
    经过验证拷贝图片是不行的。发现丢失了信息,为什么呢?
    计算机中的所有信息都是以二进制形式进行的存储(1010)图片中的也都是二进制在读取文件的时候
    字符流自动对这些二进制按照码表进行了编码处理,但是图片本来就是二进制文件,不需要进行编码。
    有一些巧合在码表中有对应,就可以处理,并不是所有的二进制都可以找到对应的。信息就会丢失。
    所以字符流只能拷贝以字符为单位的文本文件
    (以ASCII码为例是127个,并不是所有的二进制都可以找到对应的ASCII,有些对不上的,就会丢失信息。)
何时使用字符流,何时使用字节流?依据是什么?
    使用字符流的应用场景:如果是读写字符数据的时候则使用字符流。
    使用字节流的应用场景:如果是读写的数据都不需要转换成字符的时候,则使用字节流。
  1. package com.cn.writer;
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. /**
  8. * Author:Liu Zhiyong(QQ:1012421396)
  9. * Version:Version_1
  10. * Date:2016年7月28日16:29:21
  11. * Desc:使用FileReader和FileWriter拷贝一张图片
  12. 字节流可以拷贝视频和音频等文件,那么字符流可以拷贝这些吗?
  13. 经过验证拷贝图片是不行的。发现丢失了信息,为什么呢?
  14. 计算机中的所有信息都是以二进制形式进行的存储(1010)图片中的也都是二进制在读取文件的时候
  15. 字符流自动对这些二进制按照码表进行了编码处理,但是图片本来就是二进制文件,不需要进行编码。
  16. 有一些巧合在码表中有对应,就可以处理,并不是所有的二进制都可以找到对应的。信息就会丢失。
  17. 所以字符流只能拷贝以字符为单位的文本文件
  18. (以ASCII码为例是127个,并不是所有的二进制都可以找到对应的ASCII,有些对不上的,就会丢失信息。)
  19. 何时使用字符流,何时使用字节流?依据是什么?
  20. 使用字符流的应用场景:如果是读写字符数据的时候则使用字符流。
  21. 使用字节流的应用场景:如果是读写的数据都不需要转换成字符的时候,则使用字节流。
  22. */
  23. public class Demo2 {
  24. public static void main(String[] args) throws IOException {
  25. //找到目标文件
  26. File file = new File("F:/cool.png");
  27. File destFile = new File("f:/nn.png");
  28. //建立数据通道
  29. FileReader fileReader = new FileReader(file);
  30. FileWriter fileWriter = new FileWriter(destFile);
  31. //建立缓冲字符数组边读边写
  32. int length = 0;
  33. char[] buf = new char[1024];
  34. while((length = fileReader.read(buf)) != -1){
  35. fileWriter.write(buf, 0, length);
  36. }
  37. //关闭资源
  38. fileWriter.close();
  39. fileReader.close();
  40. }
  41. }

0 0