代碼如下:

/***
* 從輸入流擷取位元組數組,當檔案很大時,報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;
}
參考我的另外一篇部落格:http://hw1287789687.iteye.com/blog/2019425