亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? blockallocationtablereader.java

?? java 報(bào)表 to office文檔: 本包由java語言開發(fā)
?? JAVA
字號:
/* ====================================================================   Copyright 2002-2004   Apache Software Foundation   Licensed under the Apache License, Version 2.0 (the "License");   you may not use this file except in compliance with the License.   You may obtain a copy of the License at       http://www.apache.org/licenses/LICENSE-2.0   Unless required by applicable law or agreed to in writing, software   distributed under the License is distributed on an "AS IS" BASIS,   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   See the License for the specific language governing permissions and   limitations under the License.==================================================================== */        package org.apache.poi.poifs.storage;import java.io.IOException;import java.io.OutputStream;import java.util.*;import org.apache.poi.poifs.common.POIFSConstants;import org.apache.poi.util.IntList;import org.apache.poi.util.LittleEndian;import org.apache.poi.util.LittleEndianConsts;/** * This class manages and creates the Block Allocation Table, which is * basically a set of linked lists of block indices. * <P> * Each block of the filesystem has an index. The first block, the * header, is skipped; the first block after the header is index 0, * the next is index 1, and so on. * <P> * A block's index is also its index into the Block Allocation * Table. The entry that it finds in the Block Allocation Table is the * index of the next block in the linked list of blocks making up a * file, or it is set to -2: end of list. * * @author Marc Johnson (mjohnson at apache dot org) */public class BlockAllocationTableReader{    private IntList _entries;    /**     * create a BlockAllocationTableReader for an existing filesystem. Side     * effect: when this method finishes, the BAT blocks will have     * been removed from the raw block list, and any blocks labeled as     * 'unused' in the block allocation table will also have been     * removed from the raw block list.     *     * @param block_count the number of BAT blocks making up the block     *                    allocation table     * @param block_array the array of BAT block indices from the     *                    filesystem's header     * @param xbat_count the number of XBAT blocks     * @param xbat_index the index of the first XBAT block     * @param raw_block_list the list of RawDataBlocks     *     * @exception IOException if, in trying to create the table, we     *            encounter logic errors     */    public BlockAllocationTableReader(final int block_count,                                      final int [] block_array,                                      final int xbat_count,                                      final int xbat_index,                                      final BlockList raw_block_list)        throws IOException    {        this();        if (block_count <= 0)        {            throw new IOException(                "Illegal block count; minimum count is 1, got " + block_count                + " instead");        }        // acquire raw data blocks containing the BAT block data        RawDataBlock blocks[] = new RawDataBlock[ block_count ];        int          limit    = Math.min(block_count, block_array.length);        int          block_index;        for (block_index = 0; block_index < limit; block_index++)        {            blocks[ block_index ] =                ( RawDataBlock ) raw_block_list                    .remove(block_array[ block_index ]);        }        if (block_index < block_count)        {            // must have extended blocks            if (xbat_index < 0)            {                throw new IOException(                    "BAT count exceeds limit, yet XBAT index indicates no valid entries");            }            int chain_index           = xbat_index;            int max_entries_per_block = BATBlock.entriesPerXBATBlock();            int chain_index_offset    = BATBlock.getXBATChainOffset();            for (int j = 0; j < xbat_count; j++)            {                limit = Math.min(block_count - block_index,                                 max_entries_per_block);                byte[] data   = raw_block_list.remove(chain_index).getData();                int    offset = 0;                for (int k = 0; k < limit; k++)                {                    blocks[ block_index++ ] =                        ( RawDataBlock ) raw_block_list                            .remove(LittleEndian.getInt(data, offset));                    offset                  += LittleEndianConsts.INT_SIZE;                }                chain_index = LittleEndian.getInt(data, chain_index_offset);                if (chain_index == POIFSConstants.END_OF_CHAIN)                {                    break;                }            }        }        if (block_index != block_count)        {            throw new IOException("Could not find all blocks");        }        // now that we have all of the raw data blocks, go through and        // create the indices        setEntries(blocks, raw_block_list);    }    /**     * create a BlockAllocationTableReader from an array of raw data blocks     *     * @param blocks the raw data     * @param raw_block_list the list holding the managed blocks     *     * @exception IOException     */    BlockAllocationTableReader(final ListManagedBlock [] blocks,                               final BlockList raw_block_list)        throws IOException    {        this();        setEntries(blocks, raw_block_list);    }    /**     * Constructor BlockAllocationTableReader     *     *     */    BlockAllocationTableReader()    {        _entries = new IntList();    }    /**     * walk the entries from a specified point and return the     * associated blocks. The associated blocks are removed from the     * block list     *     * @param startBlock the first block in the chain     * @param blockList the raw data block list     *     * @return array of ListManagedBlocks, in their correct order     *     * @exception IOException if there is a problem acquiring the blocks     */    ListManagedBlock [] fetchBlocks(final int startBlock,                                    final BlockList blockList)        throws IOException    {        List blocks       = new ArrayList();        int  currentBlock = startBlock;        while (currentBlock != POIFSConstants.END_OF_CHAIN)        {            blocks.add(blockList.remove(currentBlock));            currentBlock = _entries.get(currentBlock);        }        return ( ListManagedBlock [] ) blocks            .toArray(new ListManagedBlock[ 0 ]);    }    // methods for debugging reader    /**     * determine whether the block specified by index is used or not     *     * @param index index of block in question     *     * @return true if the specific block is used, else false     */    boolean isUsed(final int index)    {        boolean rval = false;        try        {            rval = _entries.get(index) != -1;        }        catch (IndexOutOfBoundsException ignored)        {        }        return rval;    }    /**     * return the next block index     *     * @param index of the current block     *     * @return index of the next block (may be     *         POIFSConstants.END_OF_CHAIN, indicating end of chain     *         (duh))     *     * @exception IOException if the current block is unused     */    int getNextBlockIndex(final int index)        throws IOException    {        if (isUsed(index))        {            return _entries.get(index);        }        else        {            throw new IOException("index " + index + " is unused");        }    }    /**     * Convert an array of blocks into a set of integer indices     *     * @param blocks the array of blocks containing the indices     * @param raw_blocks the list of blocks being managed. Unused     *                   blocks will be eliminated from the list     *     * @exception IOException     */    private void setEntries(final ListManagedBlock [] blocks,                            final BlockList raw_blocks)        throws IOException    {        int limit = BATBlock.entriesPerBlock();        for (int block_index = 0; block_index < blocks.length; block_index++)        {            byte[] data   = blocks[ block_index ].getData();            int    offset = 0;            for (int k = 0; k < limit; k++)            {                int entry = LittleEndian.getInt(data, offset);                if (entry == POIFSConstants.UNUSED_BLOCK)                {                    raw_blocks.zap(_entries.size());                }                _entries.add(entry);                offset += LittleEndianConsts.INT_SIZE;            }            // discard block            blocks[ block_index ] = null;        }        raw_blocks.setBAT(this);    }}   // end class BlockAllocationTableReader

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产不卡视频一区二区三区| 日本道精品一区二区三区| 亚洲成a人v欧美综合天堂下载| 欧美激情自拍偷拍| 天堂va蜜桃一区二区三区| 国产a精品视频| 久久久精品日韩欧美| 久久成人精品无人区| 丝袜亚洲另类欧美综合| 不卡一区二区在线| 日本不卡的三区四区五区| 国产成人精品亚洲777人妖 | 91精品国产手机| 亚洲成av人在线观看| 国产精品久久毛片av大全日韩| 91精品国产综合久久精品麻豆| 亚洲精品水蜜桃| 日韩精品乱码免费| 日本韩国精品在线| 欧美美女网站色| 国产女主播视频一区二区| 欧美视频自拍偷拍| 国产一区二区三区免费播放| 亚洲一二三级电影| 国产在线一区二区综合免费视频| 最新不卡av在线| 在线观看亚洲专区| 99re热这里只有精品免费视频| 欧美综合在线视频| 图片区日韩欧美亚洲| 欧美成人video| 久久午夜色播影院免费高清 | 欧美三级电影在线观看| 国产馆精品极品| 精品国产欧美一区二区| 亚洲男同性恋视频| 91污在线观看| 国产福利电影一区二区三区| 欧美v亚洲v综合ⅴ国产v| 中文字幕一区视频| 日本中文字幕不卡| 欧美图区在线视频| 久久久久久久久久久电影| 伊人婷婷欧美激情| 972aa.com艺术欧美| 欧美日韩一区高清| 亚洲超碰97人人做人人爱| 欧美另类久久久品| 337p亚洲精品色噜噜噜| 久久毛片高清国产| 人人精品人人爱| 欧美老女人在线| 蜜桃久久久久久| 成人精品电影在线观看| 国产精品天美传媒沈樵| 欧美中文字幕一区二区三区| 亚洲欧洲日本在线| 麻豆极品一区二区三区| 欧美少妇bbb| 婷婷中文字幕综合| 精品日韩99亚洲| 亚洲男人的天堂网| 亚洲伊人色欲综合网| av一区二区三区在线| 欧美日韩国产成人在线91| 日韩欧美中文一区二区| 亚洲一区在线视频| 久久婷婷色综合| 色婷婷国产精品久久包臀 | 国产丝袜在线精品| 91免费观看在线| 亚洲免费三区一区二区| 国产精品午夜电影| 精品国产人成亚洲区| 在线综合视频播放| 欧美人与性动xxxx| 欧美日韩精品欧美日韩精品| 91一区在线观看| 成人黄动漫网站免费app| 国产一区二区h| 国产成人精品亚洲午夜麻豆| 国产在线视频一区二区三区| 久久国产日韩欧美精品| 蜜桃一区二区三区在线| 久久99久久久久| 日本不卡一区二区三区| 日韩电影免费在线看| 视频一区二区三区在线| 日本va欧美va精品| 狠狠色丁香九九婷婷综合五月| 精品在线一区二区三区| 乱中年女人伦av一区二区| 激情图片小说一区| 国产成人av一区二区三区在线观看| 国产一区二区美女诱惑| 国产成人在线看| 亚洲视频在线一区观看| 91.成人天堂一区| 日韩一区二区三区视频| 91精品国产综合久久久蜜臀粉嫩| 欧美一区二视频| 2022国产精品视频| 亚洲欧洲国产日本综合| 26uuu国产电影一区二区| 国产精品久久久久婷婷| 老司机精品视频在线| 韩国精品在线观看| 成人免费高清在线观看| 亚洲成人精品影院| 国产亚洲va综合人人澡精品| 五月天久久比比资源色| 免费成人你懂的| 青青草国产精品97视觉盛宴| 成人av片在线观看| 日韩福利电影在线观看| 成人午夜大片免费观看| caoporn国产精品| 色综合久久88色综合天天6| 91丨porny丨在线| 欧美性受极品xxxx喷水| 欧美日韩精品欧美日韩精品一| 国产精品每日更新| 国产精品一区二区男女羞羞无遮挡 | 国产精品污污网站在线观看| 亚洲日本乱码在线观看| 五月婷婷久久丁香| 国产一区日韩二区欧美三区| 一本一道波多野结衣一区二区| 欧美日韩国产在线播放网站| 欧美日韩一区高清| 国产精品污网站| 国产精品69毛片高清亚洲| 国产亚洲精品7777| 亚洲成人av电影在线| 久久97超碰色| 99久久久免费精品国产一区二区| 欧美日韩大陆在线| 在线一区二区三区四区五区| 久久久天堂av| 久久电影国产免费久久电影| 日韩欧美不卡在线观看视频| 欧美日韩激情一区二区| 中文字幕日韩精品一区| 国产亚洲美州欧州综合国| 国产精品2024| 国产亚洲1区2区3区| 国产91色综合久久免费分享| 337p亚洲精品色噜噜狠狠| 亚洲国产一区二区a毛片| 国产一区二区导航在线播放| 国产成人亚洲综合a∨婷婷| 在线看一区二区| 久久久无码精品亚洲日韩按摩| 国产毛片精品国产一区二区三区| 粉嫩在线一区二区三区视频| 在线观看区一区二| 久久九九影视网| 久久久噜噜噜久久中文字幕色伊伊| 亚洲免费观看高清完整版在线| 高清国产午夜精品久久久久久| 欧美精品aⅴ在线视频| 一个色在线综合| av在线不卡电影| 国产精品久久久久婷婷| 亚洲va欧美va人人爽午夜| 中文字幕av一区二区三区高| 国产一区二区三区在线观看免费 | 国产精品第一页第二页第三页| 亚洲综合色自拍一区| 亚洲欧美日韩中文字幕一区二区三区 | 亚洲va国产天堂va久久en| 国产精品18久久久久久久久久久久| 91麻豆精品久久久久蜜臀| 亚洲女女做受ⅹxx高潮| 色综合视频一区二区三区高清| 久久青草欧美一区二区三区| 国产美女精品一区二区三区| 在线免费精品视频| 亚洲国产精品久久艾草纯爱| 欧美日韩三级一区二区| 亚洲激情图片小说视频| 欧美午夜寂寞影院| 亚洲综合小说图片| 欧美三级资源在线| 亚洲一区二区三区精品在线| 欧美日韩午夜精品| 美女视频网站黄色亚洲| 日韩欧美一二区| 国产剧情一区二区三区| 国产清纯美女被跳蛋高潮一区二区久久w | 色呦呦一区二区三区| 精品少妇一区二区三区日产乱码 | 国产免费成人在线视频| 99免费精品在线| 亚洲天堂a在线| 欧美老肥妇做.爰bbww视频| 日韩精品一区第一页| 欧美一区二区私人影院日本| 国内精品第一页| 国产女人aaa级久久久级|