您是否坚持使用编码,因为您有字节数组,并且链中的下一个方法需要InputStream? 不用担心Java有解决方案,您可以使用
ByteArrayInputStream 在Java中将字节数组转换为InputStream 。 此类使用字节数组作为源,并且由于它是InputStream的子类,因此您可以轻松地将其传递给任何接受InputStream作为参数的方法。 尽管大多数API(例如JDBC和File API)都允许您直接从InputStream读取,因为这允许您使用有限的堆空间来处理任意内容。 您应该利用此优势,直接从InputStream读取而不是获取字节数组,然后将它们转换回InputStream。 仅适用于您拥有旧代码而不再维护和更新的情况。 同样,将字节数组转换为OutputStream也很简单。 由于我们使用OutputStream编写某些内容,因此您可以直接在其中写入字节数组。 假设您从TCP套接字收到了一些消息并希望保留在文件系统中,则可以使用OutputStream和FileOutputStream直接写入字节数组。 前面我们已经看到了如何将InputStream转换为字节数组 ,在本文中,通过创建一个将字节数组转换为InputStream的简单示例,我们将看到相反的结果。

这是我们的示例程序,该程序首先从String中获取字节数组以进行测试。 无论如何,在将String转换为字节时总是提供字符编码 ,反之亦然。 为了重新创建场景,我创建了一个静态方法,该方法将InputStream转换为String。 此方法称为streamToString(),该方法采用InputStream和字符编码来读取文本。 我们重新创建相同的String,之前已将其转换为字节数组。 本示例的下一部分显示如何将字节数组写入OutputStream 。 顺便说一句,如果您不使用try-with-resource语句 ,那么不要忘记在完成Streams后立即关闭它。 可以说,接受InputStream的方法是否应该关闭它,但出于安全考虑,我已经关闭了它。 让我知道您对此有何想法,因为Apache Commons IO和Google Guava中都有IO实用程序类的示例,它们关闭流,但不关闭传递给它们的流。

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
/*** Java Program to convert byte array to InputStream and OutputStream in Java.* Uses ByteArrayInputStream and ByteArrayOutputStream examples.* @author Javin Paul*/
public class ByteArrayToStream {public static void main(String args[]) {String str = "Google is GOD";byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
// Creating InputStream from byte array// ByteArrayInputStream is sub-class of InputStreamInputStream is = new ByteArrayInputStream(bytes);String stringFromBytes = streamToString(is, StandardCharsets.UTF_8);System.out.println("String recreated from bytes : " + str);
// Writing byte array to OutputStreamOutputStream os = new ByteArrayOutputStream();try {os.write(bytes);os.close();} catch (IOException e) {e.printStackTrace();}}/** Read String from InputStream and closes it*/public static String streamToString(InputStream is, Charset encoding) {BufferedReader br = new BufferedReader(new InputStreamReader(is, encoding));StringBuilder sb = new StringBuilder(1024);try {String line = br.readLine();while (line != null) {sb.append(line);line = br.readLine();}} catch (IOException io) {System.out.println("Failed to read from Stream");io.printStackTrace();} finally {try {br.close();} catch (IOException ioex) {System.out.println("Failed to close Streams");ioex.printStackTrace();}}return sb.toString();}
}
Output:
String recreated from bytes : Google is GOD

您可以看到我们的streamToString()方法如何将InputStream转换为String ,但是在此之前,我们已经使用ByteArrayInputStream 在Java中将字节数组转换为InputStream了 。 正如我所说的,ByteArrayInputStream是InputStream的子类,您可以在需要InputStream时通过或使用它。 从java.io包中获得的类层次结构图也很清楚,该图显示了JDK库中InputStream的不同实现。

这就是如何在Java中将字节数组转换为InputStream的全部内容。 由于对java.io软件包的了解有限,一开始听起来可能很困难,但是一旦您知道有一个名为ByteArrayInputStream的类,它就变得非常简单。 由于它是InputStream的子类,因此可以代替InputStream传递它。 如果要将字节转换为字符并在完成后关闭流,请不要忘记提供字符编码。

翻译自: https://www.javacodegeeks.com/2014/04/how-to-convert-byte-array-to-inputstream-and-outputstream-in-java.html

如何在Java中将字节数组转换为InputStream和OutputStream相关推荐

  1. 如何在Java中将字节数组转换为十六进制字符串?

    我有一个用十六进制数字填充并打印的字节数组,简单的方法是毫无意义的,因为有许多不可打印的元素. 我需要的是以下形式的确切十六进制代码: 3a5f771c #1楼 最简单的解决方案,没有外部库,没有数字 ...

  2. byte数组转16进制 java_如何在Java中将字节数组转换为十六进制格...

    我知道您可以使用printf并使用StringBuilder.append(String.format("%x",byte))将值转换为HEX值并在控制台上显示它们.但我希望能够实 ...

  3. java 打印16进制数组_如何在Java中将字节数组转换为十六进制字符串?

    从这里的讨论,特别是这个答案,这是我目前使用的功能:private final static char[] hexArray = "0123456789ABCDEF".toChar ...

  4. 对象数组转成字符串数组 java_如何在Java中将对象数组转换为字符串数组

    如何在Java中将对象数组转换为字符串数组 我使用以下代码将Object数组转换为String数组: Object Object_Array[]=new Object[100]; // ... get ...

  5. scala 字符串转换数组_如何在Scala中将字节数组转换为字符串?

    scala 字符串转换数组 Byte Array in Scala is an array of elements of a byte type. String in Scala is a colle ...

  6. java csv 数组_如何在Java中将JSON数组转换为CSV?

    JSON可以用作数据交换格式,并且是轻量级且与语言无关的.甲JSONArray可以从一个字符串解析文本以产生向量样物体和支承件的java.util.列表接口.我们可以使用org.json.CDL类将J ...

  7. 2个在Java中将Byte []数组转换为String的示例

    将字节数组转换为String似乎很容易,但是很难做到正确. 每当字节转换为String或char时,许多程序员都会犯忽略字符编码的错误,反之亦然. 作为程序员,我们都知道计算机只能理解二进制数据,即0 ...

  8. 如何在Java中将GIF图像转换为PNG等图像格式?试试Aspose

    通常,GIF图像用于描述动画.动画GIF是按特定顺序组合在一起的帧的集合.但是,在某些情况下,必须将GIF图像转换为其他光栅图像格式.对于这种情况,本文演示了如何使用Java将GIF图像转换为PNG, ...

  9. java中字节数组转换为字符串

    1.字节数组转换为字符串 byte[] byBuffer = new byte[20]; ... ... String strRead = new String(byBuffer); strRead= ...

最新文章

  1. 正则表达式中模式修正符作用详解(i、g、m、s、x、e)
  2. 日本推出机器人代理相亲,相亲现场帮你自我介绍
  3. python bottle框架 运维_python bottle框架(WEB开发、运维开发)教程 | linux系统运维...
  4. HarmonyOS之数据管理·分布式数据服务的应用
  5. python素材和代码_python之文件和素材
  6. 供给测结构性改革内容_智能包装结构,提高可测性
  7. 服务器重装 pe,WinPE 下安装 Windows Server 2003 服务器
  8. [CareerCup] 4.7 Lowest Common Ancestor of a Binary Search Tree 二叉树的最小共同父节点
  9. 外键为','(逗号)拼接ID,连接查询外键表ID
  10. 参加 CSDN 2009 英雄大会有感(二)
  11. postgresql cast转换类型
  12. 【知识索引】【C++入门】
  13. 分别采用线性LDA、k-means和SVM算法对鸢尾花数据集和月亮数据集进行二分类可视化分析
  14. git与idea结合,实现通过idea向远程仓库gitee发送代码和获取代码
  15. javaweb实现pdf预览
  16. 【大学物理·早期量子论和量子力学基础】一维定态薛定谔方程的应用
  17. IE弹出窗口显示URL地址栏(适合IE10、IE11等)
  18. Mach-O文件, 架构包framework的合并和拆分
  19. 新库上线 | CnOpenData中国各地区方言信息数据
  20. 从输入/输出的视角看TCP/IP(终端,shell以及X Window)

热门文章

  1. 数据库主从和主备部署介绍
  2. 学习PL/SQL最好的书籍推荐
  3. java oca_OCA的Java拼图游戏第3部分
  4. spock测试_用于混合Spock 1.x和JUnit 5测试的Maven项目设置
  5. java中qrcode_如何在Java中使用QRGen创建QRCode
  6. ssrs 基于表达式显示_基于表达式的访问控制
  7. docker 容器监控_以简便的方式监控Docker容器中的ADF应用程序
  8. jdk 8 时区 转换_JDK 8 BigInteger精确缩小转换方法
  9. apache pulsar_Apache Pulsar:分布式Pub-Sub消息系统
  10. javafx_JavaFX在这里留下来!