2012-05-06 7 views
2

私はこのコードを使用しようとしました: netty - ChannelBuffer型をファイルに保存するにはどうすればいいですか?

saver=new FileOutputStream(file); 
byte c; 
while (content.readable()){ //content is a ChannelBuffer type 
    c = content.readByte(); 
    saver.write(c); 
    } 

が、ファイルストリームがバイナリであるため、書き込み速度が本当に遅いようだ

! ChannelBufferをファイルに本当に速く保存する方法はありますか?

+0

は時間を1バイトを書いていない試してみてください。ストリームが「バイナリ」であるという事実はそれとは無関係です。より大きなチャンクで読み書きする必要があります。 –

+0

私ははっきりとは表現していませんでしたが、私がバイナリで意味することは、データが塊であるということです。どのようにデータをラージ・チャンクでファイルに書き込むことができますか?つまり、ChannelBufferのすべてのバイトをファイルに保存したいのですが、どうしたらいいですか? – chentingpc

答えて

7

バッファ全体をファイルに書き込んでみます。このサンプルコードは、nettyファイルアップロードappからのものです。

FileOutputStream outputStream = new FileOutputStream(file); 
    FileChannel localfileChannel = outputStream.getChannel(); 
    ByteBuffer byteBuffer = buffer.toByteBuffer(); 
    int written = 0; 
    while (written < size) { 
     written += localfileChannel.write(byteBuffer); 
    } 
    buffer.readerIndex(buffer.readerIndex() + written); 
    localfileChannel.force(false); 
    localfileChannel.close(); 
+0

それは働いた、thx :) – chentingpc

+0

問題はありません。あなたはその質問に回答としてマークを付けることができます。 – Veebs

1
ChannelBuffer cBuffer = ***; 

    try (FileOutputStream foStream = new FileOutputStream(filepath)) { 
     while (cBuffer.readable()) { 
      byte[] bb = new byte[cBuffer.readableBytes()]; 
      cBuffer.readBytes(bb); 
      foStream.write(bb); 
     } 
     foStream.flush(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
関連する問題