2009-02-23 25 views
32

Tôi cần đặt nội dung của số java.nio.ByteBuffer vào java.io.OutputStream. (ước gì tôi có một số Channel thay vào đó nhưng tôi không) Cách tốt nhất để làm điều này là gì?Làm thế nào để đưa nội dung của một ByteBuffer vào một OutputStream?

Tôi không thể sử dụng phương thức array() của ByteBuffer vì nó có thể là bộ đệm chỉ đọc.

Tôi cũng có thể xen kẽ ghi vào OutputStream giữa việc sử dụng ByteBuffer này và có một mảng thông thường là byte[] mà tôi có thể sử dụng trực tiếp OutputStream.write().

Trả lời

44

Nhìn vào Channels.newChannel(OutputStream). Nó sẽ cung cấp cho bạn một kênh được đưa ra một OutputStream. Với bộ điều hợp WritableByteChannel bạn có thể cung cấp ByteBuffer để ghi nó vào OutputStream.

public void writeBuffer(ByteBuffer buffer, OutputStream stream) { 
    WritableByteChannel channel = Channels.newChannel(stream); 

    channel.write(buffer); 
} 

Điều này nên thực hiện thủ thuật!

+0

nếu tôi giữ kênh cũng như luồng, tôi có thể kết hợp cuộc gọi đến cả hai không? –

+0

Ya, chắc chắn có thể, giảm chi phí tạo kênh mỗi lần :) –

+8

Lưu ý rằng cách tiếp cận này liên quan đến việc sao chép từ ByteBuffer vào một mảng tạm thời sau đó được ghi vào OutputStream. Nếu hiệu suất là quan trọng, bạn có thể cần phải làm một chút của refactoring để tránh các bản sao khối không cần thiết. –

Các vấn đề liên quan