Java IO,加载和保存二进制文件

Leonardocregis:

我在方法readAndWriteBinary上有以下代码,可以正确保存图像。第二个加载到字节列表,然后写入文件。但是图像坏了...

您可以使用任何图像。

我正在尝试找出中断过程的问题所在,但直到现在我仍未弄清问题所在。

...
  import com.google.common.primitives.Bytes;
  import java.io.FileInputStream;
  import java.io.FileOutputStream;
....
  private void readAndWriteBinary() throws IOException {
    try(FileInputStream fis = new FileInputStream("IMAGE-TESTING.PNG");
        FileOutputStream fos = new FileOutputStream("IMAGE-SINGLE.PNG")) {
      byte[] bytes = new byte[1024];
      while (fis.read(bytes) > 0) {
        List<Byte> bytesAux = Bytes.asList(bytes);
        fos.write(Bytes.toArray(bytesAux), 0, bytesAux.size());
      }
    }
  }
  /*
  This scenario doesn't works, looks to be the same as the readAndWriteBinary one
   */
  private void readAndWriteBinaryNonWorking() throws IOException {
    try(FileInputStream fis = new FileInputStream("IMAGE-TESTING.PNG");
        FileOutputStream fos = new FileOutputStream("IMAGE-SINGLE.PNG")) {
        byte[] bytes = new byte[1024];
        List<List<Byte>> bytesAux = new ArrayList<>();
        while (fis.read(bytes) > 0) {
          bytesAux.add(Bytes.asList(bytes));
        }
        for(List<Byte> bytesTmp : bytesAux) {
          fos.write(Bytes.toArray(bytesTmp), 0, bytesTmp.size());
        }
    }
  }
...
Leonardocregis:

我放弃了放入数组列表的列表,而工作解决方案变成了一次写入的单个数组。我不太喜欢它,因为它消耗了内存,但就我而言,还是很小的。可能是一个缓冲的作家可以更好地处理

表示集合类型没有任何意义。

  private void readAndWriteBinaryNonWorking() throws IOException {
    try (FileInputStream fis = new FileInputStream("DGII.PNG");
         FileOutputStream fos = new FileOutputStream("DGII-SINGLE.PNG")) {
      byte[] bytes = new byte[1024];
      List<Byte> bytesAux = new LinkedList<>();
      int size;
      do  {
        size = fis.read(bytes);
        bytesAux.addAll(Bytes.asList(bytes));
      } while ((size) > 0) ;
      fos.write(Bytes.toArray(bytesAux), 0, bytesAux.size());
    }
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章