java 从InputStream 获取字节数组

简介:

Java 中,如何从InputStream 读取字节数组呢?

方式一:

Java代码   收藏代码
  1. /*** 
  2.      * Has been tested 
  3.      *  
  4.      * @param in 
  5.      * @return 
  6.      * @throws IOException 
  7.      */  
  8.     public static byte[] readBytes(InputStream in) throws IOException {  
  9.         byte[] temp = new byte[in.available()];  
  10.         byte[] result = new byte[0];  
  11.         int size = 0;  
  12.         while ((size = in.read(temp)) != -1) {  
  13.             byte[] readBytes = new byte[size];  
  14.             System.arraycopy(temp, 0, readBytes, 0, size);  
  15.             result = SystemUtil.mergeArray(result,readBytes);  
  16.         }  
  17.         return result;  
  18.     }  

 

 

方式二:

Java代码   收藏代码
  1. public static byte[] readBytes3(InputStream in) throws IOException {  
  2.         BufferedInputStream bufin = new BufferedInputStream(in);  
  3.         int buffSize = BUFFSIZE_1024;  
  4.         ByteArrayOutputStream out = new ByteArrayOutputStream(buffSize);  
  5.   
  6.         // System.out.println("Available bytes:" + in.available());  
  7.   
  8.         byte[] temp = new byte[buffSize];  
  9.         int size = 0;  
  10.         while ((size = bufin.read(temp)) != -1) {  
  11.             out.write(temp, 0, size);  
  12.         }  
  13.         bufin.close();  
  14.   
  15.         byte[] content = out.toByteArray();  
  16.         return content;  
  17.     }  

 依赖的函数:

Java代码   收藏代码
  1. /*** 
  2.      * 合并字节数组 
  3.      * @param a 
  4.      * @return 
  5.      */  
  6.     public static byte[] mergeArray(byte[]... a) {  
  7.         // 合并完之后数组的总长度  
  8.         int index = 0;  
  9.         int sum = 0;  
  10.         for (int i = 0; i < a.length; i++) {  
  11.             sum = sum + a[i].length;  
  12.         }  
  13.         byte[] result = new byte[sum];  
  14.         for (int i = 0; i < a.length; i++) {  
  15.             int lengthOne = a[i].length;  
  16.             if(lengthOne==0){  
  17.                 continue;  
  18.             }  
  19.             // 拷贝数组  
  20.             System.arraycopy(a[i], 0, result, index, lengthOne);  
  21.             index = index + lengthOne;  
  22.         }  
  23.         return result;  
  24.     }  

 


相关文章
|
2月前
|
算法 Java Linux
java制作海报四:java BufferedImage 转 InputStream 上传至OSS。png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
这篇文章主要介绍了如何将Java中的BufferedImage对象转换为InputStream以上传至OSS,并解决了png图片合成时透明部分变黑的问题。
101 1
|
6月前
|
Java 数据处理 开发者
Java IO流专家级教程:深入理解InputStream/OutputStream和Reader/Writer的内部机制
【6月更文挑战第26天】Java IO流涉及字节流(InputStream/OutputStream)和字符流(Reader/Writer),用于高效处理数据输入输出。InputStream/OutputStream处理二进制数据,常使用缓冲提升性能;Reader/Writer处理文本,关注字符编码转换。两者都有阻塞IO操作,但Java NIO支持非阻塞。示例代码展示了如何使用FileInputStream/FileOutputStream和FileReader/FileWriter读写文件。理解这些流的内部机制有助于优化代码性能。
127 0
|
6月前
|
Java 开发者
Java IO流实战技巧:如何优化InputStream/OutputStream和Reader/Writer的使用?
【6月更文挑战第26天】Java IO流优化涉及缓冲、资源管理、字符编码和流式处理。使用Buffered流提高读写效率,如`BufferedInputStream`和`BufferedReader`。确保资源关闭使用try-with-resources,如`try (InputStream is = ...) {...}`。处理文本时指定编码,如`InputStreamReader(is, StandardCharsets.UTF_8)`防止乱码。流式处理大文件,分块读写避免内存溢出,以减少内存占用。这些技巧能提升程序性能和健壮性。
258 0
|
6月前
|
Java
Java IO流终极指南:从InputStream/OutputStream到Reader/Writer的全面解读
【6月更文挑战第26天】Java IO流涵盖字节流(InputStream/OutputStream)和字符流(Reader/Writer),前者处理二进制数据,后者专司文本。例如,FileInputStream/FileOutputStream用于文件的字节级读写,而FileReader/FileWriter处理字符级文本。Buffered流提供缓冲功能,提升效率。选择合适的流类取决于数据类型和性能需求。
117 0
|
6月前
|
存储 设计模式 Java
Java IO流大揭秘:如何高效使用InputStream/OutputStream和Reader/Writer?
【6月更文挑战第26天】Java IO流核心基础,涉及InputStream/OutputStream(字节流)和Reader/Writer(字符流)。高效使用的关键包括:使用Buffered流提升性能,如BufferedInputStream和BufferedOutputStream;处理编码,通过InputStreamReader和OutputStreamWriter指定如UTF-8编码;应用装饰器模式,如DataOutputStream增强功能。理解并巧妙运用这些技巧能优化数据读写操作。
123 0
|
6月前
|
Java
深入探索Java IO流:InputStream/OutputStream与Reader/Writer的奥秘!
【6月更文挑战第26天】Java IO流用于输入输出操作,包括字节流(InputStream/OutputStream)和字符流(Reader/Writer)。InputStream和OutputStream处理字节数据,是所有字节流的基类,可被继承以自定义读写行为。
101 0
|
7月前
|
传感器 数据采集 网络协议
Java串口通信:从十六进制字符串到字节数组的正确转换与发送
Java串口通信:从十六进制字符串到字节数组的正确转换与发送
326 4
|
6月前
|
Java API
Java中使用InputStream读入Jar/zip内容
Java中使用InputStream读入Jar/zip内容
79 0
|
缓存 Java
java把InputStream流写入到文件中
java把InputStream流写入到文件中
270 0
|
7月前
|
Java 对象存储
Java解决InputStream流重复使用问题【100%解决】
Java解决InputStream流重复使用问题【100%解决】