残念なことに、実際にはちょっとしたことですが、まず最初にテキストを読んでから、バイナリデータを読んでください。ここでは、バイナリの読書にとどまる解決策です。ヘルプ機能readLine
で
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();
バイトを読み取り、テキストに変換します。 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(charは2バイトのUTF-16です)。したがって、100%完全にバイトをStringに読み込むことはできません。サイズと変換のために、それは望ましくない。
最初の2行のデータを読み取ります。 2行目をint Xにパースし、ファイルの次のXバイトを読み込みますか? –
これらの要素の間にセパレータはありませんか?最後の要素開始文字の基準はありますか? – Stallion
'byte [] data =新しいバイト[size]; in.readFully(data); 'ジェームズボンドクリケットを完成させる。 –