InputStream、OutputStream、String的相互转换

本文介绍如何在Java中实现字符串与输入输出流之间的相互转换,包括使用ByteArrayInputStream将字符串转换为InputStream的方法,利用ByteArrayOutputStream将InputStream转换回字符串的过程,以及如何直接通过OutputStream输出字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://wuhongyu.iteye.com/blog/806791


1、字符串转inputStream

String string;
//......
InputStream is = new ByteArrayInputStream(string.getBytes());

2、InputStream转字符串

ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i;
while ((i = is.read()) != -1) {
	baos.write(i);
}
String str = baos.toString();
System.out.println(str);

3、String写入OutputStream

OutputStream os = System.out;
os.write(string.getBytes());

4、OutputStream写入String

 

这听起来有点荒谬,OutputStream本来就是输出源,还写入String?

不过最近项目里确实遇到了个类似的问题,比如 SOAPMessage.writeTo(OutputStream os) 这个方法,是将SOAPMessage的内容写到一个输出流中,而我想得到这个流的内容,总不能把他先写进文件再去读这个文件吧,研究了好半天,终于想起可以如下这般:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
//向OutPutStream中写入,如 message.writeTo(baos);
String str = baos.toString();








### Java 中 `InputStream` 和 `OutputStream` 的使用方法 #### 一、基本概念 在Java中,`InputStream`用于表示字节输入流,而`OutputStream`则代表字节输出流。两者并不直接继承自同一个父类,而是各自独立设计来专门处理数据的读取与写入操作[^2]。 对于`InputStream`而言,存在多个具体的实现类以适应不同场景下的需求,比如文件读取(`FileInputStream`)、内存数组读取(`ByteArrayInputStream`)以及对象反序列化(`ObjectInputStream`)等情形[^1]。 同样地,在`OutputStream`方面也有相应的具体实现用来完成特定类型的输出任务,例如向磁盘保存二进制数据或是将对象状态持久化到存储介质上。 #### 二、代码实例展示 ##### (一)利用`FileInputStream`和`FileOutputStream`进行简单的文件复制功能: ```java import java.io.*; public class FileCopyExample { public static void main(String[] args) throws IOException { try (FileInputStream fis = new FileInputStream("source.txt"); FileOutputStream fos = new FileOutputStream("destination.txt")) { int byteRead; while ((byteRead = fis.read()) != -1) { fos.write(byteRead); } } catch (IOException e) { System.out.println(e.getMessage()); } } } ``` 上述程序通过创建两个流对象——一个是源文件对应的输入流,另一个为目标位置准备好的输出流;接着在一个循环体内逐个字符地从原文件读出并立即写入新文件直至遇到文件结束标志(-1),从而实现了最基础版本的文件拷贝逻辑。 ##### (二)转换`StringBuffer`中的字符串为字节数组再作为输入源供其他组件消费: ```java import java.io.*; import java.nio.charset.StandardCharsets; public class StringBufferToStreamExample { private static final String CONTENT = "This is a test string."; public static ByteArrayInputStream getInputStream() { // 将StringBuffer的内容化为字节数组形式以便于后续加工处理 byte[] bufferBytes = CONTENT.getBytes(StandardCharsets.UTF_8); return new ByteArrayInputStream(bufferBytes); } public static void processDataFromInputStream(InputStream inputStream){ try(BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream))){ String line=reader.readLine(); System.out.println(line); }catch(IOException ex){ System.err.print(ex.toString()); } } public static void main(String[] args)throws Exception{ processDataFromInputStream(getInputStream()); } } ``` 此段代码展示了如何先构建一个基于内存缓冲区的输入流,之后将其传递给另一函数内部进一步解析或执行某些业务流程的操作模式[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值