2013-05-21 63 views
0

在測試期間,我使用基於netty的瀏覽器從服務器和客戶端之間加載了一個基於littleproxy的瀏覽器的JPG圖像。加載這個特定的圖像。通道緩衝區是CompositChannelBuffer。我正在閱讀以下方式,但無法正常工作。如何從CompositeChannelBuffer讀取?

if (chanBuff instanceof CompositeChannelBuffer) { 

    CompositeChannelBuffer compChanBuf = ((CompositeChannelBuffer) chanBuff); 

    int noOfComps = compChanBuf.numComponents(); 
    List<ChannelBuffer> buffList = compChanBuf.decompose(0, noOfComps); 

    ListIterator<ChannelBuffer> itr = buffList.listIterator(); 
    int offSet = 0; 
    int bytesRead = -1; 

    while (itr.hasNext()) { 
     ChannelBuffer buf = (ChannelBuffer) itr.next(); 
     bytesRead = buf.array().length; 
     outputStream.write(buf.array(), offSet, bytesRead); 
     offSet += bytesRead; 
    } 
} 

我也嘗試了下面的代碼,但是這也無法寫入文件。

if (chanBuff instanceof CompositeChannelBuffer){ 

    FileOutputStream outputStream = new FileOutputStream(outputFileName); 

    CompositeChannelBuffer compChanBuf = ((CompositeChannelBuffer) chanBuff); 
    int noOfComps = compChanBuf.numComponents(); 

    compChanBuf.getBytes(0, outputStream, noOfComps); 

    ChannelBuffer dynamicBuf = dynamicBuffer(); 
    compChanBuf.getBytes(0, dynamicBuf); 
    array = dynamicBuf.array(); 

    outputStream.write(array); 
} 

閱讀CompositChannelBuffer的正確方法是什麼?

回答

2

只要做到這一點,就像您像其他的緩衝區做:

ChannelBuffer buf = ... 
OutputStream out = ... 
buf.getBytes(0, out, buf.readableBytes()); 
+0

感謝諾曼。這工作!那麼我們在什麼情況下使用分解呢?只是想了解,因爲我已經觸及了該API,並且知道這一點很有用。再次感謝! – AnilJ

+0

大部分時間你根本不需要投到CompositeChannelBuffer。它只是爲您提供一些更高級的操作,例如直接訪問索引x等的組件。 –