MappedByteBufferを使用してファイルにデータを格納/ロードすることを考えています。フィールドAがlong型で、フィールドBがシリアル化されているとき、以下のようになっているとしましょう。 A(long)| B(文字列)MappedByteBufferを使用する場合のIndexOutOfBoundsException
今、私はそれに書いて読んでみたい。ここでは、サンプルコードの一部です:
RandomAccessFile file = new RandomAccessFile(dataPath.toString(), "rw");
MappedByteBuffer mbb = file.getChannel().map(FileChannel.MapMode
.READ_WRITE, 0, 256);
long num = 500;
mbb.putLong(0, num); // (1) first write the long value at beginning
String str = "Hello World!";
byte[] input = str.getBytes();
//then write a string
mbb.put(input, 8, input.length); // (2) IndexOutOfBoundsException
だから後で、私は
mbb.getLong(0)
とmbb.get(outputArray,8,outputArray.length)
を呼び出すことで、長い取得することができますが、今、私は場所で失敗しています(2)。助言がありますか?
バイト配列がゼロから始まるときに '0'を入れなければならない –
メモ:読んでいるときに' outputArray.length'を使うことはできません。いくら配分する –
@IlyaBursovありがとう!あなたの最初のポイントのために...私は文字列が8番目の位置から始まる2番目のフィールドになりたいから2番目のポイントについては、MAX_LENの上限を指定することができます。そのバッファに読み込みますか? – stranger