感谢原文作者:小思思smile
原文链接:https://blog.csdn.net/u014049880/article/details/52329333/
更多请查阅Java API文档!
在创建ByteArrayOutputStream
类实例时,内存中会创建一个byte
数组类型的缓冲区,缓冲区会随着数据的不断写入而自动增长。
可使用toByteArray()
和toString()
获取数据。
关闭ByteArrayOutputStream
无效,此类中的方法在关闭此流后仍可被调用,而不会产生任何IOException
在网络传输中我们往往要传输很多变量,我们可以利用ByteArrayOutputStream
把所有的变量收集到一起,然后一次性把数据发送出去。
示例
示例一:
public static void main(String[] args) {
int a = 0;
int b = 1;
int c = 2;
ByteArrayOutputStream bout = new ByteArrayOutputStream();
bout.write(a);
bout.write(b);
bout.write(c);
byte[] buff = bout.toByteArray();
for (int i = 0; i < buff.length; i++)
System.out.println(buff[i]);
System.out.println("***********************");
ByteArrayInputStream bin = new ByteArrayInputStream(buff);
while ((b = bin.read()) != -1) {
System.out.println(b);
}
}
示例二:
/**
* 读取文件内容
*
* @param filename 文件名
* @return
*/
public String read(String filename) throws Exception
{
FileInputStream fis = new.FileInputStream(filename);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
// 将内容读到buffer中,读到末尾为-1
while ((len = fis.read(buffer)) != -1)
{
// 本例子将每次读到字节数组(buffer变量)内容写到内存缓冲区中,起到保存每次内容的作用
outStream.write(buffer, 0, len);
}
byte[] data = outStream.toByteArray(); // 取内存中保存的数据
fis.close();
String result = new String(data, "UTF-8");
return result;
}
我的项目实际使用
仓库地址:https://github.com/b84955189/TF-MIS
源路径:src/main/java/utils/CommonUtils.java
/**
* 将输入流转为字节数组
* @author Jason
* @date 9:49 AM 6/19/2020
* @param
* @return
*/
public static byte[] toByteArray(InputStream in) throws IOException {
ByteOutputStream byteOutputStream = new ByteOutputStream();
byte[] bytes = new byte[1024];
int len=0;
while ((len=in.read(bytes))!=-1){
byteOutputStream.write(bytes,0,len);
}
return byteOutputStream.toByteArray();
}