gpt4 book ai didi

java - 使用 BufferedOutputStream 写入图像无法正常工作

转载 作者:行者123 更新时间:2023-11-29 07:49:39 29 4
gpt4 key购买 nike

我正在用 java 读取和写入图像文件。该文件可以是任何类型,所以我在写入图像时使用了缓冲读取器和写入器,但写入不正确。图像散落。

        BufferedReader bufferedReader = null;
BufferedOutputStream bufferedWriter = null;

if(!(dto.getInputStream() == null)){

try {
bufferedReader = new BufferedReader(new InputStreamReader(dto.getInputStream()));
FileOutputStream writer = new FileOutputStream(new File(WEBINFLocation.getWebInfPath()+ConstantIFC.RESOURCEPATH+dto.getFileName()+dto.getDocumentCode()+"_"+dto.getVersion()+1+"."+dto.getFormatName()));

bufferedWriter = new BufferedOutputStream(writer);
int value;
while((value = bufferedReader.read()) != -1){
bufferedWriter.write(value);
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
if (bufferedWriter != null) {
bufferedWriter.close();
}

dto.getInputStream().close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

最佳答案

问题是:

bufferedReader = new BufferedReader(new InputStreamReader(dto.getInputStream()));

您正在使用 InputStreamReader,这意味着它将二进制 数据读取为文本。不要那样做。您的 OutputStream 没问题,是您的input 处理出了问题。

您应该只使用 InputStream,或者可能使用 BufferedInputStream,理想情况下一次读取数据 block 而不是单个字节:

byte[] buffer = new byte[8192]; // Try to read 8K at a time
int bytesRead;
while ((bytesRead = input.read(buffer)) > 0) {
output.write(buffer, 0, bytesRead);
}

有各种图书馆可以帮助您完成这项工作,例如与 Guava你可以使用 BytesStreams.copy .

另请注意,如果您只是使用 Java 7,则使用 try-with-resources 语句为您执行所有关闭操作,您的代码可以更简单。例如:

try (InputStream input = dto.getInputStream();
OutputStream output = Files.newOutputStream(...)) {
BytesStreams.copy(input, output);
}

使用 Path用于指定文件路径的 API - 我建议也使用对 String.format 的调用,而不是所有的连接。

关于java - 使用 BufferedOutputStream 写入图像无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22298176/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com