私は次の方法で書き込み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 つのパラメータを取ります:
- ReadableByteChannel ソース
- ロングポジション
- ロングカウント
私の場合は しか持っていsrc
なくてposition
と を持っていませんcount
。この方法を使用してファイルを作成する方法はありますか?
また、イメージについては、NIO からのみイメージを作成するより良い方法はありますかInputStream
?
どんな情報でもとても役に立ちます。SO にも同様の質問がありますが、私のケースに適した特定の解決策を見つけることができません。
ベストアンサー1
Files.copyを使用します
Files.copy(is, Paths.get(filePath));
あなたのバージョンについては
ByteBuffer.allocateDirect
より速い -Java は、ネイティブ I/O 操作を直接実行するために最善を尽くします。クローズは信頼できません。最初の処理が失敗すると、2 番目の処理は実行されません。代わりに try-with-resources を使用してください。チャネルも
AutoCloseable
同様です。