RAMInputStream.cs
上传用户:zhangkuixh
上传日期:2013-09-30
资源大小:5473k
文件大小:2k
源码类别:

搜索引擎

开发平台:

C#

  1. /*
  2.  * Copyright 2004 The Apache Software Foundation
  3.  * 
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  * 
  8.  * http://www.apache.org/licenses/LICENSE-2.0
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  */
  16. using System;
  17. namespace Lucene.Net.Store
  18. {
  19. /// <summary> A memory-resident {@link IndexInput} implementation.
  20. /// 
  21. /// </summary>
  22. /// <version>  $Id: RAMInputStream.java 150537 2004-09-28 20:45:26Z cutting $
  23. /// </version>
  24. class RAMInputStream : BufferedIndexInput, System.ICloneable
  25. {
  26. private RAMFile file;
  27. private int pointer = 0;
  28. private long length;
  29. public RAMInputStream(RAMFile f)
  30. {
  31. file = f;
  32. length = file.length;
  33. }
  34. public override void  ReadInternal(byte[] dest, int destOffset, int len)
  35. {
  36. int remainder = len;
  37. int start = pointer;
  38. while (remainder != 0)
  39. {
  40. int bufferNumber = start / BUFFER_SIZE;
  41. int bufferOffset = start % BUFFER_SIZE;
  42. int bytesInBuffer = BUFFER_SIZE - bufferOffset;
  43. int bytesToCopy = bytesInBuffer >= remainder?remainder:bytesInBuffer;
  44. byte[] buffer = (byte[]) file.buffers[bufferNumber];
  45. Array.Copy(buffer, bufferOffset, dest, destOffset, bytesToCopy);
  46. destOffset += bytesToCopy;
  47. start += bytesToCopy;
  48. remainder -= bytesToCopy;
  49. }
  50. pointer += len;
  51. }
  52. public override void  Close()
  53. {
  54. }
  55. public override void  SeekInternal(long pos)
  56. {
  57. pointer = (int) pos;
  58. }
  59. public override long Length()
  60. {
  61. return length;
  62. }
  63.         /*
  64.         // {{Aroush-1.9}} Do we need this Clone()?!
  65. public override System.Object Clone()
  66. {
  67.             SegmentTermEnum clone = null;
  68.             try
  69.             {
  70.                 clone = (SegmentTermEnum) base.MemberwiseClone();
  71.             }
  72.             catch (System.Exception)
  73.             {
  74.             }
  75.             return clone;
  76.         }
  77.         */
  78. }
  79. }