Java NIO API에서 Buffer 클래스의 마킹 기능과 관련된 문제가 있습니다. Buffer 부모 클래스에서 마킹 기능을 상속받은 ByteBuffer를 사용하여 몇 가지 예제를 실행하려고합니다.Java NIO의 버퍼 마킹
달성하려는 예제는 "AwesomeSauce"를 출력으로 사용하고 "Sauce"다음에 마킹 기능을 사용하는 것입니다. 코드는 아래와 같다 :
다음public class MarkingNIO {
public static void main(String[] args) {
ByteBuffer buffer = ByteBuffer.allocate(20);
byte byteArray[];
buffer.put("AwesomeSauce".getBytes());
int prevPos = buffer.position();
buffer.position(7).mark().position(prevPos); //Mark position 7 and revert back so that we can flip
buffer.flip();
byteArray = new byte[buffer.limit() - buffer.position()];
for (int i = 0; buffer.hasRemaining(); i++) {
byteArray[i] = buffer.get();
}
System.out.println("Whole string: " + new String(byteArray));
buffer.reset();
byteArray = new byte[buffer.limit() - buffer.position()];
for (int i = 0; buffer.hasRemaining(); i++) {
byteArray[i] = buffer.get();
}
System.out.println("Partial String" + new String(byteArray));
}
}
내게 출력은 같이
AwesomeSauce
Exception in thread "main" java.nio.InvalidMarkException
at java.nio.Buffer.reset(Buffer.java:306)
at markingnio.MarkingNIO.main(MarkingNIO.java:37)
Java Result: 1
리셋 방법에 에러 포인트.
편집 : 학습 목적으로 mark() 및 reset() 메소드를 테스트 해 보았습니다. 어느 쪽이든, 문제는 flip() 메서드가 "mark = -1"문을 갖고 position (int)이 "if (mark> position) mark = -1;"문을 가졌다는 것입니다. 이 광고에
buffer.position(7);
에 당신이 모든 합병증을 필요로하지 않는 변경 :당신은 삭제할 수 있습니다. 단지'get (int index)'를 직접 사용하십시오. – EJP
나는 이것을 학습 목적으로하고있다. –