NIO を使用して InputStream をファイルに書き込むにはどうすればよいでしょうか? 質問する

NIO を使用して InputStream をファイルに書き込むにはどうすればよいでしょうか? 質問する

私は次の方法で書き込みInputStreamますFile:

private void writeToFile(InputStream stream) throws IOException {
    String filePath = "C:\\Test.jpg";
    FileChannel outChannel = new FileOutputStream(filePath).getChannel();       
    ReadableByteChannel inChannel = Channels.newChannel(stream);
    ByteBuffer buffer = ByteBuffer.allocate(1024);
    
    while(true) {
        if(inChannel.read(buffer) == -1) {
            break;
        }
        
        buffer.flip();
        outChannel.write(buffer);
        buffer.clear();
    }
    
    inChannel.close();
    outChannel.close();
}

これがNIOの正しい使い方なのか気になっていました。FileChannel.transferFromは 3 つのパラメータを取ります:

  1. ReadableByteChannel ソース
  2. ロングポジション
  3. ロングカウント

私の場合は しか持っていsrcなくてpositionと を持っていませんcount。この方法を使用してファイルを作成する方法はありますか?

また、イメージについては、NIO からのみイメージを作成するより良い方法はありますかInputStream?

どんな情報でもとても役に立ちます。SO にも同様の質問がありますが、私のケースに適した特定の解決策を見つけることができません。

ベストアンサー1

Files.copyを使用します

Files.copy(is, Paths.get(filePath));

あなたのバージョンについては

  1. ByteBuffer.allocateDirectより速い -Java は、ネイティブ I/O 操作を直接実行するために最善を尽くします。

  2. クローズは信頼できません。最初の処理が失敗すると、2 番目の処理は実行されません。代わりに try-with-resources を使用してください。チャネルもAutoCloseable同様です。

おすすめ記事