BufferedReader liest was anderes als BufferedWriter schreibt

Simmel

Mitglied
Moin moin,

stehe vor dem Problem, dass der BufferedReader scheinbar etwas anderes einliest als zu vor mit BufferedWriter geschrieben wurde, hier ein
Auszug aus den jeweiligen Methoden (lasst euch von dem Code nicht abschrecken):
Java:
// bis = BufferedReader
public byte[] readByteBlock(int blockSize)
	{
		// Prüfen ob wir am Ende der Datei sind
		byte[] inBytes;
		if ( fileReaderPosition >= fileLength)
		{
			// Dateiende
			return null;
		}
		// Dimensioniert das Array auf die gewünschte Blockgröße oder auf bis zum Dateiende
		else if ((fileReaderPosition + blockSize) > fileLength)
		{
			inBytes = new byte[(int)(fileLength - fileReaderPosition)];
		}
		else
		{
			inBytes = new byte[blockSize];
		}

		System.out.println("Liest ByteBlock (" + inBytes.length + "):");
		try
		{
			for (int i = 0; i < inBytes.length; i ++)
			{
				fileReaderPosition ++;
				inBytes[i] = (byte)bis.read();
				System.out.print(inBytes[i] + " ");
			}
			System.out.println();
		}
		catch (Exception e)
		{
			e.printStackTrace();
			return null;
		}
		return (inBytes);
	}

// bw= BufferedWriter
public void write(byte[] data) throws IOException
	{
		System.out.println("Schreibe Blöcke (" + data.length + "):");
		for (int i = 0; i < data.length; i ++)
		{
			bw.write(data[i]);
			System.out.print(data[i] + " ");
		}
		System.out.println();
	}
Ausführung:
Java:
System.out.println("Verschlüsselungsrunde");
			cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
			FileReader fr = new FileReader("D:\\test.txt");
			FileWriter fw = new FileWriter("D:\\ausgabe.txt");
			byte[] data = fr.readByteBlock(53);
			while (data != null)
			{
				// cipher.doFinal(data) gibt ein 64 großes Byte-Array zurück
				fw.write(cipher.doFinal(data));
				data = fr.readByteBlock(53);
			}
		
			fw.close();
			fr.close();
			
			
			System.out.println("Entschlüsselungsrunde");
			cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
			fr = new FileReader("D:\\ausgabe.txt");
			fw = new FileWriter("D:\\ausgabe2.txt");
			//for (int i = 0; i < decryptBytes.length; i ++)
			data = fr.readByteBlock(64);
			while (data != null)
			{
				fw.write(cipher.doFinal(data));
				data = fr.readByteBlock(64);
			}
			fw.close();
			fr.close();
Joa und die Ausgabe in der Konsole sieht wie folgt aus:
Code:
Verschlüsselungsrunde
Liest ByteBlock (53):
72 97 108 108 111 44 32 100 105 101 115 32 105 115 116 32 101 105 110 32 84 101 115 116 33 33 72 97 108 108 111 44 32 100 105 101 115 32 105 115 116 32 101 105 110 32 84 101 115 116 33 33 72 
Schreibe Blöcke (64):
72 11 109 29 -58 -89 3 99 85 82 24 -117 94 -43 119 10 58 -25 123 46 84 112 29 -8 -99 -128 124 115 28 73 -119 56 105 -109 -110 -119 46 -78 -42 37 -45 -63 -85 -127 92 61 118 13 98 7 -19 -67 104 -85 101 51 -102 98 -35 -109 -46 -58 -34 -23 
[...] (weitere Runden) [...]
Entschlüsselungsrunde
Liest ByteBlock (64):
72 11 109 29 63 63 3 99 85 82 24 63 94 63 119 10 58 63 123 46 84 112 29 63 63 63 124 115 28 73 63 56 105 63 63 63 46 63 63 37 63 63 63 63 92 61 118 13 98 7 63 63 104 63 101 51 63 98 63 63 63 63 63 63
Hier sieht man schon das beim zweiten eingelesene Byte der ersten Einleserunde der "Entschlüsselungsrunde" nicht mit dem ersten geschriebenen Block der Verschlüsselungsrunde übereinstimmt. Die Dateien werden zwischenzeitlich nicht mehr verändert. Wie kommt es dann zu diesen Differenzen?

Ich hoffe ihr könnt mir helfen!!
Viele Grüße
 

Volvagia

Top Contributor
Reader lesen unsigned. Versuchs mal zu signen.

Java:
int i = bis.read();
byte b = (byte)(i & 0xff);
 

HoaX

Top Contributor
Reader lesen unsigned. Versuchs mal zu signen.

Java:
int i = bis.read();
byte b = (byte)(i & 0xff);
Dürfte nichts bringen, sondern nur wenn man von byte -> int die Bits 1:1 übernehmen will.


Warum nutzt die Reader/Writer? Die sind für Text gedacht! Nutz Input/OutputStream, dann sollte es ohne Probleme funktionieren.

Edith sagt:
Schmutzige Lösung:
Java:
bw.write(data[i]);
durch
Java:
bw.write(data[i] & 0xff);
ersetzen. Aber statt Reader/Writer einfach Input/Outputstreams zu verwenden ist die wirklich saubere Lösung und in keiner Weise aufwendiger.
 
Zuletzt bearbeitet:

Simmel

Mitglied
Super Danke, verwende jetzt lediglich die Input- und OutputStreams und es funktioniert. Hatte die BufferedReader/Writer verwendet, da ich der Meinung bin, mal gehört zu haben, dass die bei großen Dateien (> 1 GB) schneller und sicherer sind. Ist das was dran?
:)
 

HoaX

Top Contributor
Nein, da ist absolut nichts dran. Die sind höchstens langsamer, da sich sich noch um das Encoding kümmern, und somit u.U. mehrere Bytes zu einem zusammenfassen -> Bei binären Daten niemals Reader/Writer nutzen!
 

musiKk

Top Contributor
Super Danke, verwende jetzt lediglich die Input- und OutputStreams und es funktioniert. Hatte die BufferedReader/Writer verwendet, da ich der Meinung bin, mal gehört zu haben, dass die bei großen Dateien (> 1 GB) schneller und sicherer sind. Ist das was dran?
:)

Jein. Gepufferte Streams sind u. U. schon effektiver, aber bei Input- und OutputStream sollte man dann BufferedInput- und -OutputStream verwenden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java: BufferedReader liest nur die Hälfte der Text-Datei. Java Basics - Anfänger-Themen 4
J bufferedReader liest zu wenig daten ein Java Basics - Anfänger-Themen 6
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
S Erklärung BufferedReader und InputStreamReader Java Basics - Anfänger-Themen 4
Dimax BufferedReader.readLine().length() wirft NullPointer Java Basics - Anfänger-Themen 6
K Verständnisfrage Server/Client BufferedReader, PrintWriter Java Basics - Anfänger-Themen 2
M BufferedReader begrenzen Java Basics - Anfänger-Themen 3
O BufferedReader - Endlos Schleife Java Basics - Anfänger-Themen 2
K BufferedReader für IOTools ersetzen? Java Basics - Anfänger-Themen 17
M BufferedReader neue Zeile nach Knopfdruck Java Basics - Anfänger-Themen 9
H Unterschied BufferedReader und BufferedInputStream Java Basics - Anfänger-Themen 4
S BufferedReader TextFields Import Java Basics - Anfänger-Themen 5
B BufferedReader gibt Datei-Inhalt doppelt aus Java Basics - Anfänger-Themen 3
S BufferedReader nächste Zeile lesen Java Basics - Anfänger-Themen 4
E Erste Schritte txt.Datei mit BufferedReader einlesen und in 2D-Array abspeichern Java Basics - Anfänger-Themen 15
A Textdatei mit BufferedReader einlesen Java Basics - Anfänger-Themen 0
P Einlesen von Daten via BufferedReader Java Basics - Anfänger-Themen 4
S Einlesen BufferedReader Java Basics - Anfänger-Themen 5
D BufferedReader/InputStreamReader/Split Java Basics - Anfänger-Themen 2
M bufferedreader loop stoppen Java Basics - Anfänger-Themen 2
HoloYoitsu BufferedReader verhält sich seltsam Java Basics - Anfänger-Themen 10
I BufferedReader Text-Datei einlesen??? Java Basics - Anfänger-Themen 1
J Scanner & BufferedReader Java Basics - Anfänger-Themen 3
D Hilfe bei FileReader und BufferedReader Java Basics - Anfänger-Themen 2
V Fehlerhafte BufferedReader/switch Benutzung? Java Basics - Anfänger-Themen 2
L 2x BufferedReader in einem Programm Java Basics - Anfänger-Themen 1
K Einlesen einer txt von BufferedReader klappt nicht wie gewünscht Java Basics - Anfänger-Themen 12
N BufferedReader Java Basics - Anfänger-Themen 19
N Erste Zeile bei BufferedReader doppelt lesen? Java Basics - Anfänger-Themen 2
P Interpreter-Fehler Probleme mit java.io.BufferedReader Java Basics - Anfänger-Themen 6
M BufferedReader => TextField/Label Java Basics - Anfänger-Themen 8
B Input/Output Benutzereingabe mit BufferedReader Java Basics - Anfänger-Themen 7
B Erste Schritte BufferedReader mag nicht so recht Java Basics - Anfänger-Themen 4
B Input/Output Probleme mit BufferedReader Java Basics - Anfänger-Themen 4
J BufferedReader in Integer konvertieren Java Basics - Anfänger-Themen 7
T Input/Output StructuredFileReader extends BufferedReader Java Basics - Anfänger-Themen 6
P BufferedReader - als String[] speichern ? Java Basics - Anfänger-Themen 5
H Problem mit Regex in Verbindung mit BufferedReader Java Basics - Anfänger-Themen 4
J InputStreamReader + BufferedReader - keine Eingabemöglichkeit Java Basics - Anfänger-Themen 10
G Hilfe bei BufferedReader Java Basics - Anfänger-Themen 4
A Methoden BufferedReader durchzählen dann lesen Java Basics - Anfänger-Themen 11
T BufferedReader mehrere Zeilen einlesen Java Basics - Anfänger-Themen 4
S Erste Schritte Frage bezüglich "BufferedReader" Java Basics - Anfänger-Themen 3
A BufferedReader mit geöffneter Datei Java Basics - Anfänger-Themen 4
M Eigener InputStream will nicht mit BufferedReader Java Basics - Anfänger-Themen 3
H BufferedReader Zeilenauslesen & verwenden Java Basics - Anfänger-Themen 4
F Eingabe von Ganzen Zahlen oder Strings mit BufferedReader Java Basics - Anfänger-Themen 10
D BufferedReader und .split() Java Basics - Anfänger-Themen 3
C BufferedReader Java Basics - Anfänger-Themen 5
C Datentypen BufferedReader Java Basics - Anfänger-Themen 6
c_sidi90 BufferedReader Benzinverbrauch Java Basics - Anfänger-Themen 7
Antoras Datei laden mit BufferedReader sehr langsam Java Basics - Anfänger-Themen 7
J Bufferedreader nich von anfang an. Java Basics - Anfänger-Themen 14
M Position des BufferedReader Java Basics - Anfänger-Themen 6
J Socket - BufferedReader lese Problem Java Basics - Anfänger-Themen 2
U BufferedReader - mark Java Basics - Anfänger-Themen 6
Hamstinator Frage zu BufferedReader/FileReader Java Basics - Anfänger-Themen 4
K BufferedReader/Writer trotz Cache? Java Basics - Anfänger-Themen 9
MEETyA Zeilenumbrüche fehlen nach BufferedReader Java Basics - Anfänger-Themen 3
S BufferedReader in Methode übergeben Java Basics - Anfänger-Themen 2
C BufferedReader und FileWrite Java Basics - Anfänger-Themen 2
G Frage zu BufferedReader readline() Java Basics - Anfänger-Themen 3
M BufferedReader.readline() Unix/Windows Zeilenumbruch Java Basics - Anfänger-Themen 4
K zwei Funktionen, ein BufferedReader? Java Basics - Anfänger-Themen 8
K BufferedReader im Konstruktor // guter Stil ? Java Basics - Anfänger-Themen 2
hdi FileReader / BufferedReader langsam? Java Basics - Anfänger-Themen 3
N BufferedReader Verständnisproblem Java Basics - Anfänger-Themen 12
M Problem mit BufferedReader. Java Basics - Anfänger-Themen 10
N Probleme mit dem BufferedReader Seitenquelltext auszulesen Java Basics - Anfänger-Themen 6
G BufferedReader Problem Java Basics - Anfänger-Themen 5
G Probleme mit BufferedReader Java Basics - Anfänger-Themen 6
E Was ließt der BufferedReader eigentlich ein? Java Basics - Anfänger-Themen 3
N Problem mit BufferedReader und close() Java Basics - Anfänger-Themen 6
T NullPointerException bei BufferedReader Java Basics - Anfänger-Themen 4
G bufferedReader -> String[] Java Basics - Anfänger-Themen 8
J NullPointerException BufferedReader.readLine() Java Basics - Anfänger-Themen 4
S java.io.* BufferedReader to String Java Basics - Anfänger-Themen 12
T BufferedReader oder Prozess, wer hängt sich auf? Java Basics - Anfänger-Themen 6
G BufferedReader Problem Java Basics - Anfänger-Themen 10
W Bestimmten Pfad im BufferedReader Java Basics - Anfänger-Themen 4
P BufferedReader / FileReader Key und Values Java Basics - Anfänger-Themen 7
K FileReader BufferedReader & Arrays Java Basics - Anfänger-Themen 14
G BufferedReader - split-Methode Java Basics - Anfänger-Themen 6
G Bufferedreader Java Basics - Anfänger-Themen 11
B BufferedReader für Char? Java Basics - Anfänger-Themen 6
K BufferedReader & BufferedWriter Java Basics - Anfänger-Themen 6
G BufferedReader Java Basics - Anfänger-Themen 6
V BufferedReader dann zusammenzählen Java Basics - Anfänger-Themen 3
G Hashset verknüpfen mit BufferedReader Java Basics - Anfänger-Themen 18
S BufferedReader (JFileChooser) Java Basics - Anfänger-Themen 2
P Komisches Verhalten von BufferedReader und readLine() Java Basics - Anfänger-Themen 2
R Probleme mit Bufferedreader Java Basics - Anfänger-Themen 11
R frage zur read()-Methode des BufferedReader Java Basics - Anfänger-Themen 2
M mit BufferedReader Zeile lesen Java Basics - Anfänger-Themen 11
L read() (von bufferedReader) abbrechen Java Basics - Anfänger-Themen 5
L unterbrechen von bufferedReader.read() Java Basics - Anfänger-Themen 4
R BufferedReader <-> InputStream Java Basics - Anfänger-Themen 3
G BufferedReader Java Basics - Anfänger-Themen 18
A BufferedReader Java Basics - Anfänger-Themen 6
C BufferedReader und BufferedWriter im Netzwerk Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben