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 曉宇 閱讀(227) 評論(0)  編輯  收藏 所屬分類: LUCENE

          主站蜘蛛池模板: 晋州市| 丰都县| 孝感市| 乐至县| 临夏市| 什邡市| 抚松县| 南澳县| 梁平县| 正宁县| 玛沁县| 女性| 咸阳市| 鱼台县| 黎川县| 黄山市| 安国市| 积石山| 利辛县| 太谷县| 九龙县| 永嘉县| 外汇| 南漳县| 共和县| 全南县| 沙雅县| 西丰县| 祁东县| 卓尼县| 安远县| 崇州市| 永靖县| 都兰县| 乐都县| 年辖:市辖区| 绥阳县| 襄城县| 长兴县| 海盐县| 酉阳|