public bool Add2(byte[] b, int offset, int length) { //b==nullの場合は、下位クラスに向かう前に、ここではじく if (b == null) { return(false); } if (_disk != null) { return(_disk.Add(b, offset, length)); } if (_limit == -1 || (_memory.Length + length) >= _limit) { //暫定の初期化でサイズをオーバした場合 var buf = new byte[_memory.Length]; _memory.Read(buf, 0, _memory.Length); _memory.Dispose(); _memory = null; //ディスクに変更 _disk = new WebStreamDisk(); _disk.Add(buf, 0, buf.Length); return(_disk.Add(b, offset, length)); } return(_memory.Add(b, offset, length)); }
//最終的なサイズが分かっている場合は、limit(分からない場合は-1)を指定する public WebStream(int limit) { _limit = limit; if (_limit > 256000) {//サイズが大きい場合は、ファイルで保持する _disk = new WebStreamDisk(); _memory = null; } else {//リミットが分からないときは、とりあえず256KByteで初期化する _disk = null; _memory = new WebStreamMemory((_limit < 0) ? 256000 : _limit); } }
} //long(約2Gbyteまで対応) //最終的なサイズが分かっている場合は、limit(分からない場合は-1)を指定する public WebStream(int limit) { _limit = limit; if (_limit > 256000) //サイズが大きい場合は、ファイルで保持する { _disk = new WebStreamDisk(); _memory = null; } else //リミットが分からないときは、とりあえず256KByteで初期化する { _disk = null; _memory = new WebStreamMemory((_limit < 0) ? 256000 : _limit); } }
public bool Add2(byte[] b,int offset,int length) { //b==nullの場合は、下位クラスに向かう前に、ここではじく if (b == null) return false; if (_disk != null) return _disk.Add(b,offset,length); if(_limit==-1 || (_memory.Length + length)>=_limit ){ //暫定の初期化でサイズをオーバした場合 var buf = new byte[_memory.Length]; _memory.Read(buf, 0, _memory.Length); _memory.Dispose(); _memory = null; //ディスクに変更 _disk = new WebStreamDisk(); _disk.Add(buf,0,buf.Length); return _disk.Add(b,offset,length); } return _memory.Add(b,offset,length); }