private static Stream GetSeekableStream(IUnstructuredReader input, SeekableInputStreamHackMode inputStreamHackMode) { switch (inputStreamHackMode) { case SeekableInputStreamHackMode.Disabled: return(input.BaseStream); case SeekableInputStreamHackMode.CopyToMemoryStream: var ms = new MemoryStream((int)input.Length); input.BaseStream.CopyTo(ms); ms.Seek(0, SeekOrigin.Begin); return(ms); case SeekableInputStreamHackMode.ReflectIntoBaseStream: throw new NotImplementedException(); case SeekableInputStreamHackMode.MemoryMappedFile: var mmf = MemoryMappedFile.CreateNew(Guid.NewGuid().ToString(), input.Length); using (var mmvs = mmf.CreateViewStream(0, input.Length, MemoryMappedFileAccess.Write)) { input.BaseStream.CopyTo(mmvs); } return(mmf.CreateViewStream(0, input.Length, MemoryMappedFileAccess.Read)); default: throw new NotImplementedException(); } }
public OrcExtractor(SeekableInputStreamHackMode streamHackMode = SeekableInputStreamHackMode.CopyToMemoryStream) { SeekableStreamHackMode = streamHackMode; }