К сожалению, это действительно немного косвенное: текст первого чтения, а затем двоичные данные. Вот решение, остающееся с двоичным чтением.
FileInputStream fin = ...
BufferedInputStream bin = new BufferedInputStream(fin, 2048);
String name = readLine(bin);
String lineWithSize = readLine(bin);
int size = Integer.parseInt(lineWithSize);
byte[] data = new byte[size];
bin.read(data, 0, size);
bin.close();
С функцией помощи readLine
для чтения байтов и преобразование их в текст. Как BufferedReader.readLine, он отбрасывает окончание строк, здесь, в упрощенном предположении, что конец строки является либо LF, либо CR + LF.
String readLine(BufferedInputStream bin) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (;;) {
int ch = bin.read();
if (ch == -1) {
break;
}
if (ch == '\r' || ch == '\n') {
if (ch == '\r') {
bin.read();
}
break;
}
baos.write(ch);
}
return baos.toString("ISO-8859-1"); // Basic Latin-1 encoding.
}
Чтение текста с помощью Reader всегда представляет собой преобразование байтов с использованием некоторой кодировки этих байтов. К его внутреннему Unicode (символ имеет два байта UTF-16). Следовательно, вы не можете на 100% отлично читать байты в String. Из-за размера и преобразования это даже не желательно.
Прочтите сначала две строки данных. Разделите вторую строку на int X, затем прочитайте следующие X байты файла? –
Нет ли разделителей между этими элементами? Есть ли какие-либо критерии для запуска начального символа? – Stallion
'byte [] data = новый байт [размер]; in.readFully (data); 'для завершения крикетной игры james. –