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

您是否坚持使用编码,因为您有字节数组,并且链中的下一个方法需要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的不同实现。

InputStream Java

这就是如何在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 笔记打包下载_mysql 5.7压缩包安装笔记

重装系统之后准备安装mysql,看到官网上有mysql 5.7.10可以下载就点了,然后就开始了漫长的安装路程,总共折腾差不多一个多小时,最后终于安装成功了,这里把安装过程写下来,给自己做个笔记,也给后来人一个安装提示.1.下载安装包直接点击或者复制之后就可以下载了,不嫌麻烦或者想体…

Java 8 LongAdders:管理并发计数器的正确方法

我只是喜欢新玩具,而Java 8有很多 。 这次我想谈谈我的最爱之一-并发加法器。 这是一组用于管理由多个线程编写和读取的计数器的新类。 新的API有望显着提高性能,同时仍然使事情变得简单明了。 自从多核架构问世以来人们一直在管理并发计数器&#xff0…

JS中ptototype和__proto__的关系

学到原型的时候感觉头都大了/(ㄒoㄒ)/~~ 尤其是ptototype和__proto__ 傻傻分不清 通过多番查找资料,根据自己的理解,总结如下: 一、构造函数: 构造函数:通过new关键字可以用来创建特定类型的对象的函数。比如像Obje…

[最短路]飞行

题目描述 WFYZ的校园很大,这里生活着很多生物,比如住在钟楼上的的鸽子,其中鸽子冉冉和她的妹妹凝凝白天在不同的地方吃虫,而在晚上她们都回到钟楼休息。她俩是两只懒鸟,于是提出了一个计划,尽量减少她们在飞…

Java状态和策略设计模式之间的差异

为了在Core Java应用程序中正确使用状态和策略设计模式,对于Java开发人员清楚地了解它们之间的区别很重要。 尽管状态和策略设计模式的结构相似,并且都基于开放式封闭设计原则,从SOLID设计原则表示为“ O”,但它们在意图上完全不同…

廖雪峰Java3异常处理-1错误处理-2捕获异常

1捕获异常 1.1 finally语句保证有无错误都会执行 try{...}catch (){...}finally{...} 使用try...catch捕获异常可能发生异常的语句放在try{...}中使用catch捕获对应的Exception及其子类1.2 捕获多个异常 try{...} catch() {...} catch(){...}finally{..} 使用多个catch子句&…

更新数据库

方法一:在对SQL数据库进行更新时,用CommandBuilder对像来自动构建sql命令,来起到更新的作用;这种方法用起来比较方便,具体代码如下: 以下代码都在xp系统下测试通过 环境:vs.net2005 \ sql server 2000\xpus…

在崩溃或断电后测试Lucene的索引耐久性

Lucene有用的事务功能之一是索引持久性 ,它可以确保一旦成功调用IndexWriter.commit ,即使操作系统或JVM崩溃或断电,或者您杀死-KILL JVM进程,重启后索引也将保持完整(未损坏),并将反映崩溃前的…

Jmeter、postman、python 三大主流技术如何操作数据库?

1、前言 只要是做测试工作的,必然会接触到数据库,数据库在工作中的主要应用场景包括但不限于以下: 功能测试中,涉及数据展示功能,需查库校验数据正确及完整性;例如商品搜索功能 自动化测试或性能测试中&a…

利用ASP.NET向服务器上传文件[转]

文件上传技术是一个很实用的技术,有着很广泛的应用,在ASP.NET自身的前一个版本ASP里实现这个功能,就必须使用第三方的组件或者自己开发组件了,现在,用ASP.NET实现起来就简单得多了,我们不需要使用任何组件就…

java中HashMap详解

HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实现类。虽然 HashMap 和 HashSet 实现的接口规范不同,但它们底层的 Hash 存储机制完全一样,甚…

java代码编写的文本特征提取_Test1 java语言写的特征提取源代码,有搞文字识别的可以下载一看,简单易学 Develop 274万源代码下载- www.pudn.com...

文件名称: Test1下载 收藏√ [5 4 3 2 1 ]开发工具: Java文件大小: 35 KB上传时间: 2015-03-02下载次数: 46提 供 者: 常杰详细说明:java语言写的特征提取源代码,有搞文字识别的可以下载一看,简单易学-Feature extraction of the Java …

c# HashTable (哈希表)

HashTable 哈希表 也是System.Collections集合下的数据结构类 它储存的也是Object类型的对象 但是它在内存中是散列排布的 因为这个特性,非常适合存储大量的数据 在HashTable中一个键只能对应一个值,一个值可以对应多个键(多对一)…

Spring集成–配置Web服务客户端超时

介绍 在Spring Integration的支持下,您的应用程序可以使用出站Web服务网关来调用Web服务。 调用由该网关处理,因此您只需要担心构建请求消息和处理响应。 但是,使用这种方法并不明显,如何配置其他选项,例如设置超时或操…

将txt文件和excel文件导入SQL2000数据库

在做一些web数据库管理系统的时候经常要实现将帐户批量注册的功能,今天就来讲讲如何在C#-web项目中将txt文件和excel文件导入SQL2000数据库。1.数据库准备在SQL2000数据库的实例数据库pubs中建立一个数据表txtInsert,字段很简单:id&#xff0…

Java 8 Friday:Java 8将彻底改变数据库访问

在Data Geekery ,我们喜欢Java。 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 对于Java 8系列 ,我们很荣幸主持Iu Ming-Yee Iu博士发表的非常相关的嘉宾帖子。 Iu …

Linux文件权限管理

权限管理 1、权限解读 权限:用户针对文件是否有读、写、执行的权利。 权限划分:读(Read)、写(Write)、执行(eXecute) 权限针对用户的划分:主人(User&#xff…

Sqoop数据迁移工具的使用

文章作者:foochane 原文链接:https://foochane.cn/article/2019063001.html Sqoop数据迁移工具的使用 sqoop简单介绍 sqoop数据到HDFS/HIVE sqoop数据到MySQL 1 sqoop简单介绍 sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。用…

java中io.nio.aio_Java中网络IO的实现方式-BIO、NIO、AIO

在网络编程中,接触到最多的就是利用Socket进行网络通信开发。在Java中主要是以下三种实现方式BIO、NIO、AIO。关于这三个概念的辨析以前一直都是好像懂,但是表达的不是很清楚,下面做个总结完全辨析清楚。1. BIO方式首先我用一个较为通俗的语言…

C++中this指针

由类生成对象时&#xff0c;对象中只保存私有数据。 因为由一个类生成的所有对象为其数据服务的方法都是相同的&#xff0c;因此&#xff0c;一个类中的方法是大家所共用的。 而这就牵扯到当对象A调用方法时&#xff0c;如何保证该方法操作的数据是对象A的数据。 #include<i…