2014-02-27 26 views
2

有沒有辦法將數據寫入到連接到通道的OutputStream對象,並且此通道將數據傳遞給bytebuffer(最好是直接bytebuffer)?使用通道將數據從outputStream傳遞到bytebuffer

我有一種情況,第三方函數可以將其輸出寫入outputStream。我希望能夠使用通道將此數據寫入字節緩衝區。

可能嗎?

謝謝

+0

你能發佈你的頻道代碼嗎? – fge

+0

我還沒有任何頻道。我打算添加一個能夠讀取寫入outputStream的數據並將其傳遞給byteBuffer – Marco

+0

然後,您只需要一個'ByteBuffer'而不是一個通道,對吧? – fge

回答

1

您可以輕鬆創建一個類,extends OutputStream,因爲這不僅需要一個方法來實現。示例,未經測試的代碼:

public final class ByteBufferOutputStream 
    extends OutputStream 
{ 
    private final ByteBuffer buf; 

    public ByteBufferOutputStream(final int size) 
    { 
     buf = ByteBuffer.allocateDirect(size); 
    } 

    @Override 
    public void write(final int b) 
     throws IOException 
    { 
     if (buf.remaining() == 0) 
      throw new IOException("buffer is full"); 
     buf.put((byte) (b & 0xff)); 
    } 
} 

然後,只需將該類的一個實例傳遞給您的API。由於ByteBuffer有專門的方法來寫入字節數組,因此您也可能想要覆蓋其他write方法。

+0

感謝您的回答。它看起來該函數將在每個調用中寫入一個字節。任何想法如何提高這個功能的效率? – Marco

+2

那麼,在代碼之後,我添加了更多的文本:你可以覆蓋_other_'.write()'方法 – fge