csusky

          常用鏈接

          統計

          最新評論

          org.apache.lucene.store.RAMInputStream

          該類是從RAMFile中讀數據用的
          最重要的一個方法:
          該方法存在著從RAMFile的多個byte[1024]中讀取數據的情況,所以應該在循環中進行處理

           public void readInternal(byte[] dest, int destOffset, int len) {
              int remainder = len;
              int start = pointer;
              while (remainder != 0) {
                int bufferNumber = start/BUFFER_SIZE; //  buffer的序號
                int bufferOffset = start%BUFFER_SIZE; //    buffer偏移量
                int bytesInBuffer = BUFFER_SIZE - bufferOffset;// 在當前buffer中剩下的字節數
                //如果緩沖區中剩余的字節大于len,則讀出len長度的字節,如果不夠則讀出剩余的字節數
                // bytesToCopy表示實際讀出的字節數
                int bytesToCopy = bytesInBuffer >= remainder ? remainder : bytesInBuffer;
                byte[] buffer = (byte[])file.buffers.elementAt(bufferNumber);
                System.arraycopy(buffer, bufferOffset, dest, destOffset, bytesToCopy);
                destOffset += bytesToCopy;       //增加已經復制的byte數據長度 到  dest中的偏移量
                start += bytesToCopy;                 //RAMFile文件指針,用來確定bufferNumber 和bytesInBuffer   相當于內存中的分頁
                remainder -= bytesToCopy;       //剩余的還未復制的字節數
              }
              pointer += len;//文件指針位置
            }

          posted on 2008-04-18 11:45 曉宇 閱讀(232) 評論(0)  編輯  收藏 所屬分類: LUCENE

          主站蜘蛛池模板: 分宜县| 常宁市| 油尖旺区| 乐清市| 西华县| 美姑县| 南澳县| 邹平县| 达日县| 淮北市| 河池市| 抚远县| 兴安县| 伊通| 土默特右旗| 长寿区| 依安县| 英山县| 万山特区| 五家渠市| 天津市| 晋州市| 洛隆县| 南部县| 新乡县| 白山市| 左权县| 界首市| 收藏| 喀什市| 万安县| 永年县| 佛山市| 克东县| 万宁市| 永登县| 天祝| 清水河县| 堆龙德庆县| 桓仁| 大港区|