0

私は ByteBuffer クラスのラッパーを持っています (私のコードでは、エンティティの基礎となる構造であるため)。ByteBuffer に固定サイズのエントリを格納し、何も書き込まれていないオフセットで読み取ろうとすると、null を返すか例外をスローする必要があります。私は次のコードを書きました:

private static final int SIZE = 16; //Bytes
private static final int BBSIZE = 48 * SIZE;
ByteBuffer blockMap = ByteBuffer.allocateDirect(BBSIZE);

byte[] readAtOffset(final int offset) throws BufferUnderflowException,  
                                             IndexOutOfBoundsException {
    byte[] dataRead = new byte[SIZE];
    blockMap.position(offset);
    blockMap.get(dataRead);
    return dataRead;
}

void writeAtOffset(final int offset, final byte[] data)
        throws BufferOverflowException, IndexOutOfBoundsException, ReadOnlyBufferException     
{
     if (data.length != SIZE) {
         throw new IllegalArgumentException("Invalid data received");
     }
     blockMap.position(offset);
     blockMap.put(data);
}


public static void main(String[] args) {
    ByteBufferTests tests = new ByteBufferTests();
    System.out.println("At 0: " + tests.readAtOffset(0));       
}

まだバッファに何も書き込んでいないので、これは例外をスローすべきではありませんか? 私は何を間違っていますか?

4

2 に答える 2

2

ByteBufferJavaDocから引用するには:

新しいバッファの位置はゼロになり、制限はその容量になり、マークは undefinedになり、各要素はゼロに初期化されます。

したがって、バッファに書き込んでいない場合allocateDirect(...)でも、メソッドには (ある意味で) 書き込んでいます。

乾杯、

于 2013-08-20T09:26:13.687 に答える