/** * バイト配列からファイルへコピーします。 * * @param in バイト配列。{@literal null}であってはいけません * @param out ファイル。{@literal null}であってはいけません * @return コピーしたバイト数 */ public static int copy(final byte[] in, final File out) { assertArgumentNotNull("in", in); assertArgumentNotNull("out", out); final FileOutputStream os = OutputStreamUtil.create(out); try { final FileChannel channel = os.getChannel(); final ByteBuffer buffer = ByteBuffer.wrap(in); return ChannelUtil.write(channel, buffer); } finally { CloseableUtil.close(os); } }
/** * ファイル入力ストリームの内容を出力ストリームにコピーします。 * * <p>ファイル入力ストリーム、出力ストリームともクローズされません。 * * @param in ファイル入力ストリーム * @param out 出力ストリーム * @return コピーしたバイト数 */ protected static int copyInternal(final FileInputStream in, final OutputStream out) { try { final FileChannel channel = in.getChannel(); final ByteBuffer buffer = ByteBuffer.allocate(DEFAULT_BUF_SIZE); final byte[] buf = buffer.array(); int len; int amount = 0; while ((len = ChannelUtil.read(channel, buffer, amount)) != -1) { out.write(buf, 0, len); buffer.clear(); amount += len; } out.flush(); return amount; } catch (final IOException e) { throw new IORuntimeException(e); } }
/** * ファイル入力ストリームの内容をファイル出力ストリームにコピーします。 * * <p>ファイル入力ストリーム、ファイル出力ストリームともクローズされません。 * * @param in ファイル入力ストリーム * @param out ファイル出力ストリーム * @return コピーしたバイト数 */ protected static int copyInternal(final FileInputStream in, final FileOutputStream out) { final FileChannel ic = in.getChannel(); final FileChannel oc = out.getChannel(); return (int) ChannelUtil.transfer(ic, oc); }