csusky

          常用鏈接

          統計

          最新評論

          org.apache.lucene.store.RAMOutputStream

          這是OutputStream的一個子類,其輸出設備是內存,準確來說是RAMFile,即將數據寫入到RAMFile的Vector中去。
          該類有一個最重要的方法,現在把它整個貼出來

          public void flushBuffer(byte[] src, int len) {
              int bufferNumber = pointer/BUFFER_SIZE;   //buffer序列,即當前所寫Buffer在RAMFile中的Vector中的序列號
              int bufferOffset = pointer%BUFFER_SIZE;   //偏移量,即當前所寫字節在當前Buffer中的偏移量。
              int bytesInBuffer = BUFFER_SIZE - bufferOffset; //當前Buffer的剩余可寫字節數
             //bytesToCopy是實際寫入的字節數,如果當前Bufer的剩余字節數大于需要寫的字節的總數則寫入所有字節
             //否則,將當前Buffer寫滿即可,剩余的字節將寫入下一個Buffer
              int bytesToCopy = bytesInBuffer >= len ? len : bytesInBuffer;

              if (bufferNumber == file.buffers.size())
                file.buffers.addElement(new byte[BUFFER_SIZE]); //在RAMFile中添加新的byte[1024]元素

              byte[] buffer = (byte[])file.buffers.elementAt(bufferNumber);
              System.arraycopy(src, 0, buffer, bufferOffset, bytesToCopy);

              if (bytesToCopy < len) {     // not all in one buffer,
                int srcOffset = bytesToCopy;
                bytesToCopy = len - bytesToCopy;    // remaining bytes 剩余的未寫入的字節數
                bufferNumber++;                         //將buffer數增加1
                if (bufferNumber == file.buffers.size()) 
                  file.buffers.addElement(new byte[BUFFER_SIZE]);
                buffer = (byte[])file.buffers.elementAt(bufferNumber); //剩余字節寫入下一個Buffer
                System.arraycopy(src, srcOffset, buffer, 0, bytesToCopy);
              }
              pointer += len;
              if (pointer > file.length)
                file.length = pointer;        //移位文件指針          在原有的基礎上加上實際寫入的字節總數

              file.lastModified = System.currentTimeMillis(); //修改文件的最后修改時間為當前時間
            }

          從指定的字節數組復制指定長度的字節到RAMFile中去。由于RAMFile中Vector的元素是byte[1024]所以可能存在做一次該操作
          要操作兩個Vector元素的情況。即先將當前byte[1024]數組填滿,再新建一個元素裝載剩余的字節。

          另外還有一個writeTo(OutputStream out)方法,將RAMFile中的數據輸出到另一個輸出流



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

          主站蜘蛛池模板: 广州市| 定襄县| 宜宾县| 大同市| 沈丘县| 西和县| 呼图壁县| 民权县| 孝感市| 峡江县| 清徐县| 延庆县| 宜章县| 周宁县| 西吉县| 浏阳市| 华池县| 张家界市| 涡阳县| 敖汉旗| 思茅市| 九龙城区| 连平县| 务川| 五河县| 新龙县| 太白县| 娄烦县| 界首市| 东安县| 隆昌县| 五指山市| 德江县| 铜梁县| 璧山县| 德格县| 山东省| 罗源县| 迁安市| 阿拉尔市| 吴川市|