Java 读取和写入文件时,输出会发生变化

Java 读取和写入文件时,输出会发生变化,java,file,file-writing,file-read,Java,File,File Writing,File Read,我正在尝试读取一个文件(扩展名无关紧要)并在此之后写入,但当我这样做时,输出文件与输入文件不同 我的代码是下一个: OutputStream outputStream = null; FileReader fr = new FileReader("rute\\inputfile.PNG"); BufferedReader br = new BufferedReader(fr); String line; while ((line= br.readLine()) != null) { co

我正在尝试读取一个文件(扩展名无关紧要)并在此之后写入,但当我这样做时,输出文件与输入文件不同

我的代码是下一个:

OutputStream outputStream = null;
FileReader fr = new FileReader("rute\\inputfile.PNG");
BufferedReader br = new BufferedReader(fr);
String line;
while ((line= br.readLine()) != null) {
    content += line;
}

byte[] toBytes= content.getBytes();
InputStream inputStream = new ByteArrayInputStream(toBytes);
try {
    outputStream = new FileOutputStream(new File("rute\\output.PNG"));
    int read = 0;
    byte[] bytes = new byte[1024];

    while ((read = inputStream.read(bytes)) != -1) {
        outputStream.write(bytes, 0, read);
    }
    outputStream.close();
} catch (Exception e) {
    e.printStackTrace();
}
inputStream.close();
若你们问我为什么要转换成字节并从这个表单中写入,是因为我需要对数据做一些处理,我需要这种转换。 如果您告诉我无法在字符串上加载图像,是的,我可以这样做:

File fil = ~~~~;
FileInputStream fis = null;
fis = new FileInputStream(fil);
byte[] bytess = IOUtils.toByteArray(fis);
但我不想这样做,因为如果我想加载大文件,堆大小不够,这可以通过“每行读取一行”来解决

感谢您的回答

我建议您先阅读。由于您正在将二进制数据读入字符串,因此您正在更改该数据的编码。因此,输出将不同

最好的方法是将二进制文件读取为字节数组。但我将取决于您需要对它们进行哪种类型的转换/编辑/更改

更新

当然,你在写作之前也在编辑你的内容

while ((line= br.readLine()) != null) {
   content += line + "\n";
}
因此,您的输出文件总是不同的

更新2

因为问题是如何读取一个大的二进制文件,所以通常是你的朋友。
或者您可以检查另一个

问题是什么?我如何在不更改文件的情况下读取和写入文件,或者输出文件与输入文件不同的问题/原因是什么?但是如果我以字节数组形式读取,我需要在数组中加载整个文件,不是吗?我每行做一行,因为我可以分割原始文件,并且不会对原始文件滥收费用heap@AlejandroPicosPrieto二进制文件上下文中的“行”是什么?@Alejandropicospieto为什么需要它来读取块?您始终可以使用或。@Alejandropicospieto创建一个
字节[]
作为缓冲区(例如大约1000字节),然后从填充缓冲区的文件中读取、处理块、写入块、读取下一个块等。@Alejandropicospieto google是您的朋友->这里您可以看到一些关于如何读取二进制文件的示例。。小文件你可以全部读取,大文件你可以读取小块,放入缓冲区