2012-03-28 2 views
2

나는 버퍼 클래스가 무엇인지 이해하지 못한다. 그들은 버퍼링을위한 것이 아닌가? 이것은 하나의 버퍼 객체가 동시에 읽고 독립적으로 읽거나 쓸 수 있어야한다는 것을 의미한다고 생각합니다. 그럼에도 불구하고 버퍼는 하나만 읽고 쓰기를위한 하나의 position을 허용합니다. 즉, 내가 상대방 put()으로 버퍼에 무엇인가 쓴다면 상대적인 get()과 관련된 민감한 것을 읽을 수 없다는 것을 의미합니다. 또한 내가 put()get()를 교환 할 수 있으면 전화를 걸면 정신 착란을 느낍니다.Java NIO Buffer 클래스의 주요 용도는 무엇입니까?

버퍼에 대한 사용 패턴 (샘플)이 있습니까? 이러한 버퍼가 기존 어레이보다 다소 훌륭하다는 것은 분명합니다.

+1

동의합니다. 별도의 읽기 포인터와 쓰기 포인터가 없기 때문에 설계가 잘못되었다고 생각됩니다. 그들이 제공 한 'flip()'작업의 추악한 이름은 게임을 멀리합니다. 현실 세계에서 뭔가와 일치했다면 더 나은 이름이었을 것입니다. 그 대신, 그것은 완전히 인공적인 이름을 가진 API 인공물입니다. – EJP

답변

2

의 ByteBuffer는/수 많은 원시 형을 넣고 엔디안을 제어 할 수 있습니다, 읽기 및 쓰기 데이터에 사용됩니다.

성능을 위해 사용할 수 있습니다 (바이트를 함께 조합하지 않고도 long 또는 double 형식으로 네이티브 액세스 할 수 있기 때문에). 직접 바이트 버퍼 "Java"메모리에 추가 사본없이 데이터를 읽고 쓸 수 있습니다. 메모리 매핑 파일은 디스크 공간의 크기까지 확장 할 수 있으므로 GC 시간에 영향을주지 않으면 서 많은 메모리를 사용할 수 있습니다.

+0

두 개의 'ByteBuffers'와 동일한 배열 또는 메모리 영역을 공유 할 수 있습니까? 이렇게하면 하나는 읽기 용으로 쓰고 다른 하나는 쓰기 용으로 사용할 수 있습니까? –

+0

정확히 스레드와 프로세스간에 데이터를 전달하기 위해 수행하는 작업입니다. 즉 공유 메모리이다. 이 작업을 수행하는 –

+1

가장 간단한 방법은. 그럼 당신은 동일한 기본 버퍼를 사용하여 두 ByteBuffer의이 ByteBuffer를하고 스플 라이스 (0을 만드는 것입니다. –

관련 문제