日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

基于java的InputStream.read(byte[] b,int off,int len)算法學習 .

 宇宙之窗 2014-04-30
基于java的InputStream.read(byte[] b,int off,int len)算法學習

public int read(byte[] b, int off, int len) throws IOException
將輸入流中最多 len 個數(shù)據(jù)字節(jié)讀入字節(jié)數(shù)組。嘗試讀取多達 len 字節(jié),但可能讀取較少數(shù)量。以整數(shù)形式返回實際讀取的字節(jié)數(shù)。
在輸入數(shù)據(jù)可用、檢測到流的末尾或者拋出異常前,此方法一直阻塞。

如果 b 為 null,則拋出 NullPointerException。

如果 off 為負,或 len 為負,或 off+len 大于數(shù)組 b 的長度,則拋出 IndexOutOfBoundsException。

如果 len 為 0,則沒有字節(jié)可讀且返回 0;否則,要嘗試讀取至少一個字節(jié)。如果因為流位于文件末尾而沒有可用的字節(jié),則返回值 -1;否則,至少可以讀取一個字節(jié)并將其存儲在 b 中。

將讀取的第一個字節(jié)存儲在元素 b[off] 中,下一個存儲在 b[off+1] 中,依次類推。讀取的字節(jié)數(shù)最多等于 len。讓 k 為實際讀取的字節(jié)數(shù);這些字節(jié)將存儲在元素 b[off] 至 b[off+k-1] 之間,其余元素 b[off+k] 至 b[off+len-1] 不受影響。

在任何情況下,元素 b[0] 至 b[off] 和元素 b[off+len] 至 b[b.length-1] 都不會受到影響。

如果不是因為流位于文件末尾而無法讀取第一個字節(jié),則拋出 IOException。特別是,如果輸入流已關閉,則拋出 IOException。

類 InputStream 的 read(b, off, len) 方法只重復調用方法 read()。如果第一個這樣的調用導致 IOException,則從對 read(b, off, len) 方法的調用中返回該異常。如果對 read() 的任何后續(xù)調用導致 IOException,則該異常會被捕獲并將發(fā)生異常時的位置視為文件的末尾;到達該點時讀取的字節(jié)存儲在 b 中并返回發(fā)生異常之前讀取的字節(jié)數(shù)。建議讓子類提供此方法的更有效的實現(xiàn)。



參數(shù):
b - 讀入數(shù)據(jù)的緩沖區(qū)。
off - 在其處寫入數(shù)據(jù)的數(shù)組 b 的初始偏移量。
len - 要讀取的最大字節(jié)數(shù)。
返回:
讀入緩沖區(qū)的總字節(jié)數(shù),如果由于已到達流末尾而不再有數(shù)據(jù),則返回 -1。
拋出:
IOException - 如果發(fā)生 I/O 錯誤。
NullPointerException - 如果 b 為 null。


read是一個很好的讀取器,對流,如應用于下載中是一個不錯的算法!例子:
    public static final int INITIAL_SIZE = 100000;
    private byte buffer[] = new byte[INITIAL_SIZE];
    private int index = 0;

   private int capacity() {
        return (buffer.length - index);
    }

   public void read(InputStream in, int max) throws IOException {
        long k= 0;

        do {
            int size;

            // only read up to the max size, if the max size was
            // specified
            if (max != -1) {
                size = Math.min(capacity(), max);
            } else {
                size = capacity();
            }

            // actually read the block
            k= in.read(buffer, index, capacity());

            // quit if we hit EOF
            if (k< 0) {
                break;
            }

            // adjust capacity if needed
            index += k;

            if (capacity() < 10) {
                expand();
            }

            // see if we hit the max length
            if (max != -1) {
                max -= l;
                if (max <= 0) {
                    break;
                }
            }
        } while (k!= 0);
    }



    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多