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

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

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

    每日一得

    不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發
    最近關心的內容:SSH,seam,flex,敏捷,TDD
    本站的官方站點是:顛覆軟件

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks
    key words : POI java讀取Excel? java.io.IOException Unable to read entire block

    版本:2.5.1final
    錯誤提示:
    java.io.IOException Unable to read entire block

    出這個問題具有隨機性,有時候沒問題,有時候將Excel里的CellType改一下好像就沒問題,但也不總是這樣,真是莫名其妙.

    Google了一下是一個bug,重新下載src文件,將RawDataBlock.java文件的RawDataBlock(final InputStream stream)constructor覆蓋:

    public?RawDataBlock(final?InputStream?stream)?throws?IOException
    ????{
    ????????_data?
    =?new?byte[?POIFSConstants.BIG_BLOCK_SIZE?];
    ????????
    int?count?=?0;
    ????????
    int?totalBytesRead?=?0;
    ????????
    while?((totalBytesRead?<?POIFSConstants.BIG_BLOCK_SIZE)?&&
    (count?
    !=?-1))?{
    ????????????????count?
    =?stream.read(_data,?totalBytesRead,
    POIFSConstants.BIG_BLOCK_SIZE?
    -?totalBytesRead);
    ????????????????
    if?(count?!=?-1)?{
    ????????????????????????totalBytesRead?
    +=?count;
    ????????????????}
    ????????}
    ??????????
    if?(count?==?-1)?{
    ????????????????_eof?
    =?true;
    ??????????}?
    else?{
    ????????????_eof?
    =?false;
    ????????}?
    ??????????
    if?((totalBytesRead?!=?POIFSConstants.BIG_BLOCK_SIZE)?&&?(totalBytesRead?!=?0))?{
    ????????????String?type?
    =?"?byte"?+?((totalBytesRead?==?1)???(""):?("s"));
    ????????????
    throw?new?IOException("Unable?to?read?entire?block;?"?+
    totalBytesRead?
    +?type?+?"?read;?expected?"?+?POIFSConstants.BIG_BLOCK_SIZE?+?"bytes");
    ????????}
    ????}


    打包:
    ant?jar

    重啟app,OK!

    說明:
    主要問題出在 InputStream的read上,原來的實現用ReadFully方法:
    public?static?int?readFully(InputStream?in,?byte[]?b,?int?off,?int?len)
    ????
    throws?IOException
    ????{
    ????????
    int?total?=?0;
    ????????
    for?(;;)?{
    ????????????
    int?got?=?in.read(b,?off?+?total,?len?-?total);
    ????????????
    if?(got?<?0)?{
    ????????????????
    return?(total?==?0)???-1?:?total;
    ????????????}?
    else?{
    ????????????????total?
    +=?got;
    ????????????????
    if?(total?==?len)
    ????????????????????
    return?total;
    ????????????}
    ????????}
    ????}

    InputStream的read不能確保返回的是最大字節數,但是另一個實現卻可以:
    ByteInputStream
    所以,下面的方法也可以修改這個問題:
    ?//?read?entire?stream?into?byte?array:
    ????ByteArrayOutputStream?byteOS?=?new?ByteArrayOutputStream();
    ????
    byte[]?buffer?=?new?byte[1024];
    ????
    int?count;
    ????
    while?(count?=?inputStream.read(buffer))?!=?-1)
    ????????byteOS.append(buffer,?
    0,?count);
    ????byteOS.close();
    ????
    byte[]?allBytes?=?byteOS.betByteArray();

    //?create?workbook?from?array:
    InputStream?byteIS?=?new?ByteArrayInputStream(allBytes);
    HSSFWorkbook?wb?
    =?new?HSSFWorkbook(byteIS);

    posted on 2006-08-10 17:09 Alex 閱讀(3590) 評論(1)  編輯  收藏 所屬分類: java

    評論

    # re: POI的一個bug問題 2006-10-30 09:09 yye
    我照著你的方法修改了以后,還是出現同樣的錯誤,而且,修改poi源碼那個,使用新的jar包后,連原來可以導入成功的文件也出現了同樣的錯誤。。。。能幫忙解決一下嗎?  回復  更多評論
      

    主站蜘蛛池模板: 亚洲国产视频一区| 亚洲AV无码乱码在线观看富二代| 亚洲一区二区三区四区视频| 暖暖免费在线中文日本| 亚洲高清在线观看| 7x7x7x免费在线观看| 亚洲欧洲日本精品| 免费看成人AA片无码视频羞羞网| 亚洲妇女水蜜桃av网网站| 中文字幕无码视频手机免费看| 亚洲人成网国产最新在线| 国产精品无码一二区免费| 美女18一级毛片免费看| 亚洲一区二区三区AV无码| 少妇人妻偷人精品免费视频| 亚洲男女一区二区三区| 欧洲美熟女乱又伦免费视频| 日韩少妇内射免费播放| 亚洲一区二区三区在线观看精品中文| 久久国产精品成人免费| 亚洲综合一区二区| 国产色爽免费视频| 91国内免费在线视频| 亚洲综合成人网在线观看| 亚洲中文字幕无码久久精品1 | 亚洲日韩一中文字暮| 五月天婷亚洲天综合网精品偷| 国产免费牲交视频免费播放| 97se亚洲综合在线| 国产大片91精品免费观看男同| www一区二区www免费| 国产无遮挡又黄又爽免费视频| 国产福利在线观看永久免费| 亚洲综合图片小说区热久久| 国产免费无遮挡精品视频| a在线观看免费视频| 亚洲娇小性xxxx色| 亚洲香蕉网久久综合影视| 在线观看特色大片免费视频| 免费国产黄网站在线观看动图 | 久久亚洲精品成人无码|