public static Write_d GetLimitedWriter(Write_d writer, long remaining) { return((buff, offset, count) => { if (remaining < (long)count) { throw new Exception("ストリームに書き込めるバイト数の上限を超えようとしました。"); } remaining -= (long)count; writer(buff, offset, count); }); }
public static void ReadToEnd(Read_d reader, Write_d writer) { byte[] buff = new byte[16 * 1024 * 1024]; for (; ;) { int readSize = reader(buff, 0, buff.Length); if (readSize < 0) { break; } writer(buff, 0, readSize); } }