csusky

          常用鏈接

          統(tǒng)計

          最新評論

          org.apache.lucene.store.RAMInputStream

          該類是從RAMFile中讀數(shù)據(jù)用的
          最重要的一個方法:
          該方法存在著從RAMFile的多個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的序號
                int bufferOffset = start%BUFFER_SIZE; //    buffer偏移量
                int bytesInBuffer = BUFFER_SIZE - bufferOffset;// 在當(dāng)前buffer中剩下的字節(jié)數(shù)
                //如果緩沖區(qū)中剩余的字節(jié)大于len,則讀出len長度的字節(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ù)長度 到  dest中的偏移量
                start += bytesToCopy;                 //RAMFile文件指針,用來確定bufferNumber 和bytesInBuffer   相當(dāng)于內(nèi)存中的分頁
                remainder -= bytesToCopy;       //剩余的還未復(fù)制的字節(jié)數(shù)
              }
              pointer += len;//文件指針位置
            }

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

          主站蜘蛛池模板: 葵青区| 仪征市| 满城县| 儋州市| 保靖县| 景泰县| 弋阳县| 南昌县| 柳州市| 凌云县| 松滋市| 澄江县| 秭归县| 金华市| 岫岩| 安丘市| 新河县| 思茅市| 本溪市| 仁寿县| 托里县| 洛阳市| 镇康县| 环江| 阿荣旗| 沂源县| 平昌县| 双流县| 镇康县| 澄江县| 华蓥市| 定边县| 临汾市| 保亭| 库尔勒市| 广德县| 龙南县| 瓦房店市| 廉江市| 涡阳县| 怀远县|