java 读取大字节流_Java I/O - 如何从输入流读取最大字节并返回字节数组

/*

* Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2006.

*

* Licensed under the Aduna BSD-style license.

*/

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

public class Main {

/**

* Reads at most maxBytes bytes from the supplied input stream and

* returns them as a byte array.

*

* @param in The InputStream supplying the bytes.

* @param maxBytes The maximum number of bytes to read from the input

* stream.

* @return A byte array of size maxBytes if the input stream can

* produce that amount of bytes, or a smaller byte containing all available

* bytes from the stream otherwise.

*/

public static final byte[] readBytes(InputStream in, int maxBytes)

throws IOException

{

byte[] result = new byte[maxBytes];

int bytesRead = in.read(result);

int totalBytesRead = bytesRead;

while (totalBytesRead < maxBytes && bytesRead >= 0) {

// Read more bytes

bytesRead = in.read(result, bytesRead, maxBytes - bytesRead);

if (bytesRead > 0) {

totalBytesRead += bytesRead;

}

}

if (totalBytesRead < 0) {

// InputStream at end-of-file

result = new byte[0];

}

else if (totalBytesRead < maxBytes) {

// Create smaller byte array

byte[] tmp = new byte[totalBytesRead];

System.arraycopy(result, 0, tmp, 0, totalBytesRead);

result = tmp;

}

return result;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值