2016-07-21 41 views
1

Ich versuche eine Datei lesen (spielt keine Rolle) und schreibe danach, aber wenn ich es mache, unterscheidet sich die Ausgabedatei von der Eingabe.Beim Lesen und Schreiben einer Datei ändert sich die Ausgabe

mein Code ist die nächste:

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(); 

Wenn Sie mich fragen, warum in Bytes konvertiert und von dieser Form zu schreiben, ist, weil ich mit den Daten etwas tun müssen, und ich brauche diese Umwandlung. Wenn Sie uns sagen, dass ich auf einem String ein Bild laden kann nicht, ja ich so etwas tun können:

File fil = ~~~~; 
FileInputStream fis = null; 
fis = new FileInputStream(fil); 
byte[] bytess = IOUtils.toByteArray(fis); 

aber ich nicht es tun will, auf diese Weise, weil, wenn ich große Dateien will laden, die Heap-Größe ist nicht genug und das könnte durch die "Zeile pro Zeile" gelöst werden.

Vielen Dank für Ihre Antworten

+0

was ist die Frage? –

+0

Wie kann ich die Datei lesen und schreiben, ohne sie zu ändern, oder was das Problem/Grund, warum die Ausgabedatei nicht die gleiche wie die Eingabe ist? –

Antwort

2

ich vorher gelesen this question wird empfehlen. Da Sie Binärdaten in einen String lesen, ändern Sie die Codierung dieser Daten. Also wird die Ausgabe anders sein.

Der beste Ansatz ist lesen Binärdateien als Byte-Arrays. Aber ich werde davon abhängen, welche Art von Transformation/Edition/Änderungen Sie mit ihnen machen müssen.

UPDATE

Und natürlich, die Sie bearbeiten Ihre Inhalte vor

Schreiben
while ((line= br.readLine()) != null) { 
    content += line + "\n"; 
} 

so die Ausgabedatei immer anders sein wird.

UPDATE 2

Da die Frage/Problem ist, wie eine große binäre Datei zu lesen, ist in der Regel google dein Freund. Oder können Sie dies überprüfen andere question

+0

Aber wenn ich als Byte-Array lese, muss ich die gesamte Datei in einem Array nicht laden? Ich mache die Zeile pro Zeile, weil ich die ursprüngliche Datei teilen kann und den Heap nicht überladen –

+1

@AlejandroPicosPrieto Was ist eine "Zeile" im Kontext einer Binärdatei? – glglgl

+0

@AlejandroPicosPrieto Warum sollten Sie es in einem Block lesen? Sie können immer https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html#read (byte []) oder https://docs.oracle.com/javase/8 verwenden /docs/api/java/io/InputStream.html#read(byte[],%20int,%20int). – glglgl