不幸的是,這確實有點環境:首先閱讀文本,然後是二進制數據。這裏有一個解決方案,留在二進制閱讀。
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%完美地將字節讀入字符串。由於尺寸和轉換,它甚至不可取。
先讀取兩行數據。將第二行解析爲一個int X,然後讀取該文件的下一個X字節? –
這些元素之間沒有分隔符嗎?是否有最後一個元素起始字符的標準? – Stallion
'byte [] data = new byte [size]; in.readFully(data);'完成詹姆斯債券板球。 –