【问题标题】:How to copy image in java using bufferedreader/writer如何使用缓冲读取器/写入器在 java 中复制图像
【发布时间】:2017-02-16 15:56:20
【问题描述】:
    File file = new File("download.png");
    File newfile = new File("D:\\Java.png");
    BufferedReader br=null;
    BufferedWriter bw=null;
    try {
        FileReader fr = new FileReader(file);
        FileWriter fw = new FileWriter(newfile);
        br = new BufferedReader(fr);
        bw = new BufferedWriter(fw);
        char[] buf = new char[1024];
        int bytesRead;
        while ((bytesRead = br.read(buf)) > 0) {
            bw.write(buf, 0, bytesRead);
        }
        bw.flush();
        }
        catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            br.close();
        bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        }

这段代码有什么问题。 BufferedReader 和 Writer 类可以吗? 我知道如何使用 InputStream 和 OutputStream 复制图像,所以不要使用它粘贴解决方案!

【问题讨论】:

标签: java java-io


【解决方案1】:

这段代码有什么问题。

您正在为二进制数据使用基于文本的类。

BufferedReader 和 Writer 类可以吗?

不是在处理二进制数据时,不是。

我知道如何使用 InputStream 和 OutputStream 复制图像,所以不要使用它粘贴解决方案!

这是您应该使用的解决方案,因为这些是为二进制数据设计的类。

从根本上说,对非文本数据使用ReaderWriter是坏的,自找麻烦。如果您在文本编辑器中打开文件但看不到文本,则它不是文本文件...(或者,它可能是您使用错误编码的文本文件,但图像和声音之类的不是自然文本。)

【讨论】:

  • 也想问一下视频是否也是以二进制形式(二进制数据)读取的??
  • @RajatGupta:是的,绝对是。如果您在记事本中打开它,您希望看到什么文字?
【解决方案2】:

使用javax.imageio.ImageIO实用类,里面有很多图片处理相关的实用方法。

try{
    File imagefile = new File("download.png");
    BufferedImage image = ImageIO.read(imagefile);
    ImageIO.write(image, "png",new File("D:\\Java.png"));
    .....
}

【讨论】:

  • 这将改变图像。最好是复制字节而不是涉及 ImageIO。此外,它将整个图像保存在内存中,这意味着它不适用于非常大的图像。
猜你喜欢
  • 2015-04-10
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多