<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    csusky

    常用鏈接

    統(tǒng)計(jì)

    最新評(píng)論

    org.apache.lucene.store.RAMOutputStream

    這是OutputStream的一個(gè)子類,其輸出設(shè)備是內(nèi)存,準(zhǔn)確來(lái)說(shuō)是RAMFile,即將數(shù)據(jù)寫(xiě)入到RAMFile的Vector中去。
    該類有一個(gè)最重要的方法,現(xiàn)在把它整個(gè)貼出來(lái)

    public void flushBuffer(byte[] src, int len) {
        int bufferNumber = pointer/BUFFER_SIZE;   //buffer序列,即當(dāng)前所寫(xiě)B(tài)uffer在RAMFile中的Vector中的序列號(hào)
        int bufferOffset = pointer%BUFFER_SIZE;   //偏移量,即當(dāng)前所寫(xiě)字節(jié)在當(dāng)前Buffer中的偏移量。
        int bytesInBuffer = BUFFER_SIZE - bufferOffset; //當(dāng)前Buffer的剩余可寫(xiě)字節(jié)數(shù)
       //bytesToCopy是實(shí)際寫(xiě)入的字節(jié)數(shù),如果當(dāng)前Bufer的剩余字節(jié)數(shù)大于需要寫(xiě)的字節(jié)的總數(shù)則寫(xiě)入所有字節(jié)
       //否則,將當(dāng)前Buffer寫(xiě)滿即可,剩余的字節(jié)將寫(xiě)入下一個(gè)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 剩余的未寫(xiě)入的字節(jié)數(shù)
          bufferNumber++;                         //將buffer數(shù)增加1
          if (bufferNumber == file.buffers.size()) 
            file.buffers.addElement(new byte[BUFFER_SIZE]);
          buffer = (byte[])file.buffers.elementAt(bufferNumber); //剩余字節(jié)寫(xiě)入下一個(gè)Buffer
          System.arraycopy(src, srcOffset, buffer, 0, bytesToCopy);
        }
        pointer += len;
        if (pointer > file.length)
          file.length = pointer;        //移位文件指針          在原有的基礎(chǔ)上加上實(shí)際寫(xiě)入的字節(jié)總數(shù)

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

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

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



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

    主站蜘蛛池模板: 亚洲综合婷婷久久| 久久久久久亚洲精品中文字幕| 亚洲一久久久久久久久| 国产精品入口麻豆免费观看| 亚洲精品午夜视频| 麻豆视频免费观看| 久久夜色精品国产噜噜亚洲a| 国产精品成人免费视频网站京东| 亚洲熟妇AV日韩熟妇在线| 午夜爱爱免费视频| 色视频在线观看免费| 亚洲色偷偷狠狠综合网| 在线观看免费无码视频| 亚洲福利视频导航| 麻豆国产精品免费视频| 亚洲GV天堂GV无码男同| 亚洲人成色77777在线观看大| 中国精品一级毛片免费播放| 亚洲尹人香蕉网在线视颅| 成人女人A级毛片免费软件| 亚洲女子高潮不断爆白浆| 国产免费观看视频| 日韩精品无码免费专区午夜| 亚洲视频中文字幕在线| 日本一道本高清免费| 久久久久国色AV免费观看| 亚洲黄色免费网址| 香蕉视频在线观看免费国产婷婷| 日本永久免费a∨在线视频| 亚洲国产精品乱码一区二区| 日韩免费精品视频| 四虎影视在线看免费观看| 亚洲国产综合专区电影在线 | 国产在线观看麻豆91精品免费| 亚洲综合校园春色| 成人亚洲网站www在线观看| 日韩免费在线视频| 在线观看亚洲网站| 亚洲精品国产成人99久久| 国产精品免费综合一区视频| 一区二区三区无码视频免费福利|