csusky

          常用鏈接

          統(tǒng)計(jì)

          最新評(píng)論

          org.apache.lucene.store.RAMInputStream

          該類是從RAMFile中讀數(shù)據(jù)用的
          最重要的一個(gè)方法:
          該方法存在著從RAMFile的多個(gè)byte[1024]中讀取數(shù)據(jù)的情況,所以應(yīng)該在循環(huán)中進(jìn)行處理

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

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

          主站蜘蛛池模板: 资源县| 苍山县| 宝山区| 丁青县| 杭州市| 浪卡子县| 阳原县| 通州区| 永嘉县| 嘉禾县| 无棣县| 武宣县| 攀枝花市| 赤峰市| 开化县| 德州市| 左云县| 双鸭山市| 武城县| 射洪县| 阿鲁科尔沁旗| 莫力| 巧家县| 梅河口市| 思茅市| 巴彦县| 仁寿县| 杭州市| 天门市| 玉树县| 张家口市| 射洪县| 工布江达县| 肥东县| 甘谷县| 临洮县| 芒康县| 金坛市| 桐庐县| 杭锦旗| 密云县|