/ / uszkodzony tekst pliku podczas czytania - java, io, bufor, strumień wejściowy

uszkodzony plik tekstowy podczas czytania - java, io, buffer, inputstream

Mam następujący kod:

BlobDomain blobDomain = null;
OutputStream out = null;
try {
blobDomain = new BlobDomain();
out = blobDomain.getBinaryOutputStream();
byte[] buffer = new byte[8192];
int bytesRead = 0;
while ((bytesRead = in.read(buffer, 0, 8192)) != -1) {
out.write(buffer, 0, bytesRead);
String line = (new String(buffer));
fullText += line;
}

} catch (Exception e) {}finally{            if (out != null)
try {
out.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}}

kiedy drukuję pełny tekst, widzę większyoznacza, że ​​końcowa część tekstu jest ponownie dodawana do pełnego tekstu. Tak więc pełny tekst ma kilka linii powtórzonych na końcu. jakieś sugestie na temat tego, co jest tutaj nie tak?

Odpowiedzi:

1 dla odpowiedzi № 1

Powodem tego jest to, że tyzapisują cały bufor za każdym razem do Twojego ciągu. Zatem po osiągnięciu końca pliku możesz nie odczytać dokładnie takiej liczby bajtów, o jakiej rozmiar ma bufor. Stare dane nadal znajdują się w buforze i zostaną również zapisane w łańcuchu.

Jedną z opcji rozwiązania tego może być zapisanie danych najpierw w ciągu znaków, a następnie w ciągu wyjściowym. Powinno to również być szybsze niż dodawanie do ciągu po każdym czytaniu.

Zapisz inputStream w String:

java.util.Scanner s = new java.util.Scanner(in).useDelimiter("\A");
fullText = s.hasNext() ? s.next() : "";

Napisz ciąg do strumienia wyjściowego:

out.write(fullText.getBytes());

Jeśli chcesz zachować kod w obecnej postaci, wykonaj podciąg w buforze i pobierz tylko odczytaną liczbę bajtów. Na przykład:

String line = (new String(buffer.substring(0,bytesRead));