天天看點

從inputStream中讀取指定長度的位元組

代碼如下:

從inputStream中讀取指定長度的位元組

/*** 

     * 從輸入流擷取位元組數組,當檔案很大時,報java.lang.outofmemoryerror: java heap space 

     *  

     * @since 2014-02-19 

     * @param br_right 

     * @param length2 

     * @return 

     * @throws ioexception 

     */  

    public static byte[] readbytesfrominputstream(inputstream br_right,  

            int length2) throws ioexception {  

        int readsize;  

        byte[] bytes = null;  

        bytes = new byte[length2];  

        long length_tmp = length2;  

        long index = 0;// start from zero  

        while ((readsize = br_right.read(bytes, (int) index, (int) length_tmp)) != -1) {  

            length_tmp -= readsize;  

            if (length_tmp == 0) {  

                break;  

            }  

            index = index + readsize;  

        }  

        return bytes;  

    }  

/*** 

     * 讀取指定長度的位元組 

     * @since 2014-02-27 

     * @param ins 

     * @param sumleng : 要讀取的位元組數 

     * @return 

     * @throws ioexception 

     */  

    public static byte[]readbytesfromgzipinputstream(gzipinputstream ins,long sumleng) throws ioexception{  

        byte[] filenamebytes = new byte[(int) sumleng];  

        int filenamereadlength=0;  

        int hasreadlength=0;//已經讀取的位元組數  

        while((filenamereadlength=ins.read(filenamebytes,hasreadlength,(int)sumleng-hasreadlength))>0){  

            hasreadlength=hasreadlength+filenamereadlength;  

        }  

        return filenamebytes;  

    }  

/*** 

     * read char array from inputstream according to specified length. 

     *  

     * @param file 

     * @param ins 

     * @param length2 

     *            :要讀取的字元總數 

     * @throws ioexception 

     */  

    public static char[] getcharsfrominputstream(bufferedreader br_right,  

            int length2) throws ioexception {  

        int readsize;  

        char[] chars = null;  

        chars = new char[length2];  

        long length_tmp = length2;  

        long index = 0;// start from zero  

        while ((readsize = br_right.read(chars, (int) index, (int) length_tmp)) != -1) {  

            length_tmp -= readsize;  

            if (length_tmp == 0) {  

                break;  

            }  

            index = index + readsize;// 寫入字元數組的offset(偏移量)  

        }  

        return chars;  

    }  

/*** 

     * 從檔案中讀取指定長度的字元(注意:不是位元組) 

     *  

     * @param file 

     * @param length2 

     * @return 

     * @throws ioexception 

     */  

    public static char[] getcharsfromfile(file file, int length2)  

            throws ioexception {  

        fileinputstream fin = new fileinputstream(file);  

        inputstreamreader inr = new inputstreamreader(fin);  

        bufferedreader br = new bufferedreader(inr);  

        return getcharsfrominputstream(br, length2);  

    }  

private static byte[] readdatafromlength(httpurlconnection huc,  

            int contentlength) throws exception {  

        inputstream in = huc.getinputstream();  

        bufferedinputstream bis = new bufferedinputstream(in);  

        // 資料位元組數組  

        byte[] recedata = new byte[contentlength];  

        // 已讀取的長度  

        int readalreadylength = 0;  

        // while ((readalreadylength+= bis.read(recedata, readalreadylength,  

        // contentlength-readalreadylength))< contentlength) {  

        // system.out.println("right");  

        // }  

        while ((readalreadylength = readalreadylength  

                + bis.read(recedata, readalreadylength, contentlength  

                        - readalreadylength)) < contentlength) {  

        }  

        // system.out.println("readlength=" + readlength);  

        return recedata;  

    }  

從inputStream中讀取指定長度的位元組

參考我的另外一篇部落格:http://hw1287789687.iteye.com/blog/2019425