我在方法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());
}
}
}
...
我放弃了放入数组列表的列表,而工作解决方案变成了一次写入的单个数组。我不太喜欢它,因为它消耗了内存,但就我而言,还是很小的。可能是一个缓冲的作家可以更好地处理
表示集合类型没有任何意义。
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] 删除。
我来说两句