Một ByteBuffer không thể thực sự hoạt động theo cách này, vì khái niệm thiết kế của nó chỉ là một khung nhìn của một mảng cụ thể mà bạn cũng có thể tham chiếu trực tiếp. Nó không thể cố gắng trao đổi mảng đó cho một mảng lớn hơn mà không có sự kỳ quặc xảy ra.
Điều bạn muốn sử dụng là DataOutput
. Cách thuận tiện nhất là sử dụng (pre-release) Ổi thư viện:
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.write(someBytes);
out.writeInt(someInt);
// ...
return out.toByteArray();
Nhưng bạn cũng có thể tạo ra một DataOutputStream từ một ByteArrayOutputStream bằng tay, và chỉ cần đối phó với IOExceptions giả mạo bằng cách kết nối chúng vào AssertionErrors.
Nguồn
2009-11-21 16:52:00
ByteArrayOutputStream là thực sự chính xác những gì tôi muốn (Tôi không thực sự làm bất kỳ I/O, tôi chỉ có một số serialization phức tạp để làm). Cảm ơn! – Seth
Seth, tuyên bố của bạn về câu hỏi ("putX") ngụ ý rằng bạn sẽ cần các phương thức như putInt, putDouble, vv, ngụ ý rằng ByteArrayOutputStream sẽ không đủ cho bạn, do đó câu trả lời của tôi về ByteArrayDataOutput. –
Tôi thậm chí sẽ không hỏi làm thế nào buf kích thước cố định là chính xác những gì bạn muốn sau khi bạn yêu cầu buf kích thước không giới hạn. Chúng ta đang sống trong thế giới nơi mà vô lý là một chuẩn mực. – Val