Một trường hợp sử dụng khá phổ biến cho ByteBuffer
là xây dựng một số cấu trúc dữ liệu từng mảnh và sau đó viết toàn bộ cấu trúc đó vào đĩa. flip
được sử dụng để lật ByteBuffer
từ "đọc từ I/O" (put
ting) thành "viết cho I/O" (get
ting): sau một chuỗi put
s được sử dụng để điền vào ByteBuffer
, flip
sẽ đặt giới hạn của bộ đệm đến vị trí hiện tại và đặt lại vị trí về 0. Điều này có tác dụng thực hiện tương lai get
hoặc write
từ bộ đệm ghi tất cả những gì là put
vào bộ đệm và không còn nữa.
Sau khi hoàn thành put
, bạn có thể muốn sử dụng lại ByteBuffer
để tạo cấu trúc dữ liệu khác. Để "unflip" nó, hãy gọi clear
. Đây resets các giới hạn công suất (làm cho tất cả các bộ đệm có thể sử dụng), và vị trí để 0.
Vì vậy, một kịch bản sử dụng điển hình:
ByteBuffer b = new ByteBuffer(1024);
for(int i=0; i<N; i++) {
b.clear();
b.put(header[i]);
b.put(data[i]);
b.flip();
out.write(b);
}
Nó "lật" bộ đệm từ đọc để viết (và ngược lại). http://thushw.blogspot.com/2009/10/java-bytebuffer-how-does-this-work.html –
@BrianRoach: Nó lật từ đọc để viết nhưng không phải là hữu ích để viết để đọc trừ khi bạn đang viết cấu trúc kích thước cố định. Để lật để ghi để đọc, hãy sử dụng 'đặt lại' để thay thế. – nneonneo
Hãy nhớ đặt câu hỏi "khách quan"; hoặc, ít nhất, làm cho câu hỏi chủ yếu dường như khách quan: D –