我想使用MappedByteBuffer存儲/加載一些數據到文件。假設我有長度爲A的字段A,字符串的字段B在序列化時如下所示: A(long)| B(字符串)IndexOutOfBoundsException當使用MappedByteBuffer
現在我想寫和讀它。這裏是一段示例代碼:
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)。有什麼建議麼?
而不是'8'你必須把0放在你的字節數組從零開始 –
也注意:你不能像使用outputArray.length一樣讀你不知道多少分配 –
@IlyaBursov謝謝!對於你的第一點......這是因爲我希望字符串成爲從第8點開始的第2個字段,對於第2點,我可以指定MAX_LEN的上限,我知道我的字符串不會長於讀入該緩衝區? – stranger