本文整理汇总了C#中Lucene.Net.Store.Directory.OpenChecksumInput方法的典型用法代码示例。如果您正苦于以下问题:C# Directory.OpenChecksumInput方法的具体用法?C# Directory.OpenChecksumInput怎么用?C# Directory.OpenChecksumInput使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Lucene.Net.Store.Directory
的用法示例。
在下文中一共展示了Directory.OpenChecksumInput方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CompressingTermVectorsReader
/// <summary>
/// Sole constructor. </summary>
public CompressingTermVectorsReader(Directory d, SegmentInfo si, string segmentSuffix, FieldInfos fn, IOContext context, string formatName, CompressionMode compressionMode)
{
this.compressionMode = compressionMode;
string segment = si.Name;
bool success = false;
fieldInfos = fn;
numDocs = si.DocCount;
ChecksumIndexInput indexStream = null;
try
{
// Load the index into memory
string indexStreamFN = IndexFileNames.SegmentFileName(segment, segmentSuffix, CompressingTermVectorsWriter.VECTORS_INDEX_EXTENSION);
indexStream = d.OpenChecksumInput(indexStreamFN, context);
string codecNameIdx = formatName + CompressingTermVectorsWriter.CODEC_SFX_IDX;
version = CodecUtil.CheckHeader(indexStream, codecNameIdx, CompressingTermVectorsWriter.VERSION_START, CompressingTermVectorsWriter.VERSION_CURRENT);
Debug.Assert(CodecUtil.HeaderLength(codecNameIdx) == indexStream.FilePointer);
indexReader = new CompressingStoredFieldsIndexReader(indexStream, si);
if (version >= CompressingTermVectorsWriter.VERSION_CHECKSUM)
{
indexStream.ReadVLong(); // the end of the data file
CodecUtil.CheckFooter(indexStream);
}
else
{
CodecUtil.CheckEOF(indexStream);
}
indexStream.Dispose();
indexStream = null;
// Open the data file and read metadata
string vectorsStreamFN = IndexFileNames.SegmentFileName(segment, segmentSuffix, CompressingTermVectorsWriter.VECTORS_EXTENSION);
vectorsStream = d.OpenInput(vectorsStreamFN, context);
string codecNameDat = formatName + CompressingTermVectorsWriter.CODEC_SFX_DAT;
int version2 = CodecUtil.CheckHeader(vectorsStream, codecNameDat, CompressingTermVectorsWriter.VERSION_START, CompressingTermVectorsWriter.VERSION_CURRENT);
if (version != version2)
{
throw new Exception("Version mismatch between stored fields index and data: " + version + " != " + version2);
}
Debug.Assert(CodecUtil.HeaderLength(codecNameDat) == vectorsStream.FilePointer);
packedIntsVersion = vectorsStream.ReadVInt();
chunkSize = vectorsStream.ReadVInt();
decompressor = compressionMode.NewDecompressor();
this.reader = new BlockPackedReaderIterator(vectorsStream, packedIntsVersion, CompressingTermVectorsWriter.BLOCK_SIZE, 0);
success = true;
}
finally
{
if (!success)
{
IOUtils.CloseWhileHandlingException(this, indexStream);
}
}
}
示例2: ReadEntries
/// <summary>
/// Helper method that reads CFS entries from an input stream </summary>
private static IDictionary<string, FileEntry> ReadEntries(IndexInputSlicer handle, Directory dir, string name)
{
System.IO.IOException priorE = null;
IndexInput stream = null;
ChecksumIndexInput entriesStream = null;
// read the first VInt. If it is negative, it's the version number
// otherwise it's the count (pre-3.1 indexes)
try
{
IDictionary<string, FileEntry> mapping;
stream = handle.OpenFullSlice();
int firstInt = stream.ReadVInt();
// impossible for 3.0 to have 63 files in a .cfs, CFS writer was not visible
// and separate norms/etc are outside of cfs.
if (firstInt == CODEC_MAGIC_BYTE1)
{
byte secondByte = stream.ReadByte();
byte thirdByte = stream.ReadByte();
byte fourthByte = stream.ReadByte();
if (secondByte != CODEC_MAGIC_BYTE2 || thirdByte != CODEC_MAGIC_BYTE3 || fourthByte != CODEC_MAGIC_BYTE4)
{
throw new CorruptIndexException("Illegal/impossible header for CFS file: " + secondByte + "," + thirdByte + "," + fourthByte);
}
int version = CodecUtil.CheckHeaderNoMagic(stream, CompoundFileWriter.DATA_CODEC, CompoundFileWriter.VERSION_START, CompoundFileWriter.VERSION_CURRENT);
string entriesFileName = IndexFileNames.SegmentFileName(IndexFileNames.StripExtension(name), "", IndexFileNames.COMPOUND_FILE_ENTRIES_EXTENSION);
entriesStream = dir.OpenChecksumInput(entriesFileName, IOContext.READONCE);
CodecUtil.CheckHeader(entriesStream, CompoundFileWriter.ENTRY_CODEC, CompoundFileWriter.VERSION_START, CompoundFileWriter.VERSION_CURRENT);
int numEntries = entriesStream.ReadVInt();
mapping = new Dictionary<string, FileEntry>(numEntries);
for (int i = 0; i < numEntries; i++)
{
FileEntry fileEntry = new FileEntry();
string id = entriesStream.ReadString();
//If the key was already present
if (mapping.ContainsKey(id))
{
throw new CorruptIndexException("Duplicate cfs entry id=" + id + " in CFS: " + entriesStream);
}
else
{
mapping[id] = fileEntry;
}
fileEntry.Offset = entriesStream.ReadLong();
fileEntry.Length = entriesStream.ReadLong();
}
if (version >= CompoundFileWriter.VERSION_CHECKSUM)
{
CodecUtil.CheckFooter(entriesStream);
}
else
{
CodecUtil.CheckEOF(entriesStream);
}
}
else
{
// TODO remove once 3.x is not supported anymore
mapping = ReadLegacyEntries(stream, firstInt);
}
return mapping;
}
catch (System.IO.IOException ioe)
{
priorE = ioe;
}
finally
{
IOUtils.CloseWhileHandlingException(priorE, stream, entriesStream);
}
// this is needed until Java 7's real try-with-resources:
throw new InvalidOperationException("impossible to get here");
}
示例3: Read
/// <summary>
/// Read a particular segmentFileName. Note that this may
/// throw an IOException if a commit is in process.
/// </summary>
/// <param name="directory"> -- directory containing the segments file </param>
/// <param name="segmentFileName"> -- segment file to load </param>
/// <exception cref="CorruptIndexException"> if the index is corrupt </exception>
/// <exception cref="IOException"> if there is a low-level IO error </exception>
public void Read(Directory directory, string segmentFileName)
{
var success = false;
// Clear any previous segments:
this.Clear();
_generation = GenerationFromSegmentsFileName(segmentFileName);
_lastGeneration = _generation;
var input = directory.OpenChecksumInput(segmentFileName, IOContext.READ);
try
{
int format = input.ReadInt();
int actualFormat;
if (format == CodecUtil.CODEC_MAGIC)
{
// 4.0+
actualFormat = CodecUtil.CheckHeaderNoMagic(input, "segments", VERSION_40, VERSION_48);
Version = input.ReadLong();
Counter = input.ReadInt();
int numSegments = input.ReadInt();
if (numSegments < 0)
{
throw new CorruptIndexException("invalid segment count: " + numSegments + " (resource: " + input + ")");
}
for (var seg = 0; seg < numSegments; seg++)
{
var segName = input.ReadString();
var codec = Codec.ForName(input.ReadString());
//System.out.println("SIS.read seg=" + seg + " codec=" + codec);
var info = codec.SegmentInfoFormat().SegmentInfoReader.Read(directory, segName, IOContext.READ);
info.Codec = codec;
long delGen = input.ReadLong();
int delCount = input.ReadInt();
if (delCount < 0 || delCount > info.DocCount)
{
throw new CorruptIndexException("invalid deletion count: " + delCount + " vs docCount=" + info.DocCount + " (resource: " + input + ")");
}
long fieldInfosGen = -1;
if (actualFormat >= VERSION_46)
{
fieldInfosGen = input.ReadLong();
}
var siPerCommit = new SegmentCommitInfo(info, delCount, delGen, fieldInfosGen);
if (actualFormat >= VERSION_46)
{
int numGensUpdatesFiles = input.ReadInt();
IDictionary<long, ISet<string>> genUpdatesFiles;
if (numGensUpdatesFiles == 0)
{
genUpdatesFiles = CollectionsHelper.EmptyMap<long, ISet<string>>();
}
else
{
genUpdatesFiles = new Dictionary<long, ISet<string>>(numGensUpdatesFiles);
for (int i = 0; i < numGensUpdatesFiles; i++)
{
genUpdatesFiles[input.ReadLong()] = input.ReadStringSet();
}
}
siPerCommit.GenUpdatesFiles = genUpdatesFiles;
}
Add(siPerCommit);
}
_userData = input.ReadStringStringMap();
}
else
{
actualFormat = -1;
Lucene3xSegmentInfoReader.ReadLegacyInfos(this, directory, input, format);
Codec codec = Codec.ForName("Lucene3x");
foreach (SegmentCommitInfo info in segments)
{
info.Info.Codec = codec;
}
}
if (actualFormat >= VERSION_48)
{
CodecUtil.CheckFooter(input);
}
else
{
long checksumNow = input.Checksum;
long checksumThen = input.ReadLong();
if (checksumNow != checksumThen)
{
throw new CorruptIndexException("checksum mismatch in segments file (resource: " + input + ")");
}
CodecUtil.CheckEOF(input);
//.........这里部分代码省略.........