RAMInputStream.cs
上传用户:zhangkuixh
上传日期:2013-09-30
资源大小:5473k
文件大小:2k
- /*
- * Copyright 2004 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- using System;
- namespace Lucene.Net.Store
- {
-
- /// <summary> A memory-resident {@link IndexInput} implementation.
- ///
- /// </summary>
- /// <version> $Id: RAMInputStream.java 150537 2004-09-28 20:45:26Z cutting $
- /// </version>
-
- class RAMInputStream : BufferedIndexInput, System.ICloneable
- {
- private RAMFile file;
- private int pointer = 0;
- private long length;
-
- public RAMInputStream(RAMFile f)
- {
- file = f;
- length = file.length;
- }
-
- public override void ReadInternal(byte[] dest, int destOffset, int len)
- {
- int remainder = len;
- int start = pointer;
- while (remainder != 0)
- {
- int bufferNumber = start / BUFFER_SIZE;
- int bufferOffset = start % BUFFER_SIZE;
- int bytesInBuffer = BUFFER_SIZE - bufferOffset;
- int bytesToCopy = bytesInBuffer >= remainder?remainder:bytesInBuffer;
- byte[] buffer = (byte[]) file.buffers[bufferNumber];
- Array.Copy(buffer, bufferOffset, dest, destOffset, bytesToCopy);
- destOffset += bytesToCopy;
- start += bytesToCopy;
- remainder -= bytesToCopy;
- }
- pointer += len;
- }
-
- public override void Close()
- {
- }
-
- public override void SeekInternal(long pos)
- {
- pointer = (int) pos;
- }
-
- public override long Length()
- {
- return length;
- }
- /*
- // {{Aroush-1.9}} Do we need this Clone()?!
- public override System.Object Clone()
- {
- SegmentTermEnum clone = null;
- try
- {
- clone = (SegmentTermEnum) base.MemberwiseClone();
- }
- catch (System.Exception)
- {
- }
- return clone;
- }
- */
- }
- }