私は長い間バイトバッファで作業していましたが、ほとんどスライスを使用しませんでした。しかし今ではslice()
の大きな問題がbytebuffer
にあります。Javaバイトバッファスライスはドキュメントごとに動作しません
コード下記参照してください:上記の結果に値:
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.util.Arrays;
public class Test12 {
public static void main(String[] args) throws UnsupportedEncodingException {
ByteBuffer original = ByteBuffer.wrap("234567".getBytes("UTF-8"));
printBuffer("org: ",original);
original.position(1);
original.limit(original.limit()-2);
printBuffer("org: ",original);
ByteBuffer sliced = original.slice();
printBuffer("slc: ",sliced);
ByteBuffer duplicated = original.duplicate();
printBuffer("dup: ",duplicated);
ByteBuffer compact = original.compact();
printBuffer("cmp: ",compact);
}
private static void printBuffer(String prefix,ByteBuffer buff)
{
System.out.println(prefix+buff);
System.out.println(prefix+Arrays.toString(Arrays.copyOfRange(buff.array(), buff.position(), buff.limit())));
}
}
それはSLCをご覧ください
org: java.nio.HeapByteBuffer[pos=0 lim=6 cap=6]
org: [50, 51, 52, 53, 54, 55]
org: java.nio.HeapByteBuffer[pos=1 lim=4 cap=6]
org: [51, 52, 53]
slc: java.nio.HeapByteBuffer[pos=0 lim=3 cap=3]
slc: [50, 51, 52]
dup: java.nio.HeapByteBuffer[pos=1 lim=4 cap=6]
dup: [51, 52, 53]
cmp: java.nio.HeapByteBuffer[pos=3 lim=6 cap=6]
cmp: [53, 54, 55]
になります。私は[51, 52, 53]
のようなものを期待しています。
私が間違っている場合は修正してください。 これはJavaのバグですか?私は、Java 7でこれを試験
、slice
方法referenceから8
、どのように「新しいバッファの内容は、このバッファの現在位置から開始しますか」? – Derlin