2016-05-04 15 views
0

Ich fragte mich, ob es eine Möglichkeit gibt, einen Byte-Puffer am Ende einer Datei hinzuzufügen, indem Sie die Positions-Methode des Datei-Kanals verwenden.FileChannel - Bytepuffer bei eof anhängen?

habe ich gelesen, dass es notwendig ist, die Datei Ausgabestrom mit dem Ergänzungsflag

ByteBuffer byteBuffer = ...; 
FileOutputStream fileOutputStream = new FileOutputStream("path/to/file", true); 
FileChannel channel = fileOutputStream.getChannel(); 

channel.write(bytebuffer); 
channel.force(true); 
channel.close(); 

jedoch sollte es nicht möglich sein, zu öffnen, den Puffer durch , Modifikation der Position des Kanals, anzuhängen.

"The size of the file increases when bytes are written beyond its current size"

ByteBuffer byteBuffer = ...; 
FileOutputStream fileOutputStream = new FileOutputStream("path/to/file"); 
FileChannel channel = fileOutputStream.getChannel(); 

channel.position(channel.size()).write(bytebuffer); 
channel.force(true); 

würde ich da die Datei für einige Erklärungen dankbar überschrieben wird.

+1

Zeigen Sie den Code, der beweist, dass er nicht wie angegeben funktioniert. – Kayaman

+0

Ist es ein Tippfehler, dass das anhängende Flag für * FileOutputStream * in Ihrem zweiten Codebeispiel nicht festgelegt ist? – Alexander

Antwort

2

Die Datei wird im zweiten Beispiel überschrieben, weil Sie keinen append Parameter mit dem Wert true angegeben haben. Danach positioniert es bei EOF nur auf Null.

+0

so gibt die Datei outputstream an, ob der Inhalt get's überschrieben oder angehängt wird wie > oder >> – jam

+0

@EJP: Es ist egal, wo Ihre Position im Channel ist, aber beim Öffnen des Streams im nicht anliegenden Modus löscht er den Dateiinhalt (Sie sollten es in Ihrem Dateibrowser sehen) und die * channel.size() * wird 0 zurückgeben. Wenn Sie * position (1024) * nennen, sollten Sie einige nicht spezifizierte erste 1024 Bytes erhalten und dann, was auch immer Sie danach schreiben. – Alexander

+0

also, wenn ich eine Datei abschneiden würde, würde ich auch die Flagg benötigen – jam