简单如下:
String str = "";//add your string content
//设置xmltag.getBytes("UTF-8") 编码
InputStream inputStream = new ByteArrayInputStream(str.getBytes());
Convert a Java OutputStream to an InputStream
If you have ever programmed using Java IO, you will quickly run into a situation in which a class creates data on an OutputStream and you need to send it to another class that expects to read the data from an input stream. You'll soon be asking the question, "How do I convert an OutputStream to an InputStream?"
Nowhere in Java will you find a OutpStreamToInputStreamConverter class. Luckily, there are several ways to go about this.
Method 1: Buffer the data using a byte array
The easiest method is to buffer the data using a byte array. The code will look something like this:
ByteArrayOutputStream out = new ByteArrayOutputStream();
class1.putDataOnOutputStream(out);
class2.processDataFromInputStream(
new ByteArrayInputStream(out.toByteArray())
);
That's it! The OutputStream has been converted to an InputStream.
Method 2: Use pipes
The problem with the first method is that you must actually have enough memory to buffer the entire amount of data. You could buffer larger amounts of data by using the filesystem rather than memory, but either way there is a hard limit to the size of the data that can be handled. The solution is create a thread to produce the data to the PipedOutputStream. The current thread can then read the data as it comes in.
PipedInputStream in = new PipedInputStream();
PipedOUtputStream out = new PipedOutputStream(in);
new Thread(
new Runnable(){
public void run(){
class1.putDataOnOutputStream(out);
}
}
).start();
class2.processDataFromInputStream(in);
Method 3: Use Circular Buffers
The two piped streams in method two actually manage a hidden circular buffer. It is conceptually easier to use an explicit Circular Buffer. CircularBuffers offer several advantages:
- One CircularBuffer class rather than two pipe classes.
- It is easier to convert between the "buffer all data" and "extra threads" approaches.
- You can change the buffer size rather than relying on the hard-coded 1k of buffer in the pipes.
Multiple Threaded Example of a Circular Buffer
CircularByteBuffer cbb = new CircularByteBuffer();
new Thread(
new Runnable(){
public void run(){
class1.putDataOnOutputStream(cbb.getOutputStream());
}
}
).start();
class2.processDataFromInputStream(cbb.getInputStream());
Single Threaded Example of a Circular Buffer
// buffer all data in a circular buffer of infinite size
CircularByteBuffer cbb = new CircularByteBuffer(CircularByteBuffer.INFINITE_SIZE);
class1.putDataOnOutputStream(cbb.getOutputStream());
class2.processDataFromInputStream(cbb.getInputStream());
See also: Converting a Writer to a Reader
ostermiller.org (site index)
Copyright Stephen Ostermiller 1996-2008
分享到:
相关推荐
在Java编程中,有时我们可能需要将一个已经写入数据的`OutputStream`转换为`InputStream`,以便重新读取这些数据。这种情况通常出现在临时存储或处理数据时,例如在网络传输或者存储到内存中的场景。本篇文章将深入...
- 使用`ByteArrayInputStream`:首先,我们可以将String转换为字节数组(byte[]),然后用这个字节数组创建一个`ByteArrayInputStream`。例如: ```java String inputString = "转换的字符串"; byte[] byteArray...
在Android开发中,有时我们需要将文件转换为字符串(String)以便于在网络上传输或存储,同时也有时需要将字符串恢复为原始文件。Base64是一种常见的编码方式,它可以把二进制数据转换成ASCII字符串形式,同时又能...
这个过程包括将源代码中的字符串常量转换为字节码,这涉及到了String到Byte的转换。`input.txt`可能是一个文本文件,其内容可能需要在网络编程中读取并转换为字节流进行传输。 总之,Java中的String与Byte类型的...
将一个String转化为InputStream,主要是将字符串转换成字节数组,然后创建一个ByteArrayInputStream。这种方法简单快捷,但会占用一定的内存空间。示例代码如下: ```java public InputStream string2...
* StringBufferInputStream,将 String 转换成 InputStream; * FileInputStream,用于从文件中读取信息; * PipedInputStream,产生用于写入相关 PipedOutputStream 的数据,实现“管道化”概念; * ...
在Java编程中,将字符串(String)与图像(Image)相互转换是一项常见的需求,特别是在处理用户输入、数据存储或显示图形信息时。这篇博文将探讨如何在Java中实现这一过程,主要涉及`Image`对象与`String`对象之间的转换...
1. 将 InputStream 对象转换成 ByteArrayOutputStream。 2. 使用 ByteArrayOutputStream 将数据写入到一个字节数组中。 3. 使用 ByteArrayInputStream 将字节数组转换回 InputStream 对象。 示例代码 下面是克隆 ...
在Java中,`String`默认使用的是Unicode编码,但在实际应用中,经常需要将`String`转换为特定字符集下的`byte[]`。 - **Java I/O操作**: 在Java中进行I/O操作时,通常涉及到`InputStream`和`OutputStream`等类,这些...
XML to JSON是一个Android Studio库,可轻松将XML转换为JSON以及将JSON转换为XML 。 它是完全可配置的,因此您可以更改例如属性名称。 与gradle集成很容易。 XML到JSON 基本用法 有两种创建XmlToJson对象的方法:...
在本文中,我们介绍了如何使用Java将图片转换为Base64编码,并将Base64编码字符串解码成图片。使用Base64编码可以将图片数据转换为文本数据,使得数据传输和存储更加安全和可靠。同时,我们也学习了如何使用Apache ...
在Java编程中,将网络上的图片读取并转换为Base64字符串是一项常见的任务,尤其在Web开发中,这样的操作可以用于数据传输或者存储。Base64是一种编码方式,能够将二进制数据转化为可打印的ASCII字符,方便在网络上...
然后,我们可以将这些元素转换成相应的HTML元素,最后组合成一个完整的HTML文件。 三、转换步骤 1. **初始化POI**: 首先,我们需要导入Apache POI相关的库,并创建适当的处理对象,如`XSSFWorkbook`(处理.xlsx文件...
在XX.hbm.xml文件中,我们需要将图片类型的列属属性类型改成type="org.springframework.orm.hibernate3.support.BlobByteArrayType",因为采用Hibernate转换时会自动将Blob类型转换成String类型。在Bean中,我们需要...
标题中的“一个将BIG5编码转换为GB2312编码的类”指的是这个压缩包包含了一个Java类,它的功能是实现字符编码的转换,即从BIG5编码转成GB2312编码。在早期的中文计算机系统中,由于地区差异和历史原因,台湾地区普遍...
3. **处理InputStream**:InputStream是一个字节流,我们需要将其转换为可读的字符串。可以使用BufferedReader和InputStreamReader组合来实现。例如: ```java BufferedReader reader = null; try { reader = ...
在本文中,我们将深入探讨如何使用JAXB实现Java对象与XML的互相转换。 首先,我们需要理解JAXB的基本工作原理。JAXB基于Java注解,这些注解用于标记Java类和它们的属性,以便JAXB知道哪些元素和属性应该映射到XML中...
if (inputStream.available() > 5 && new String(inputStream.readNBytes(5)).equals("DOPC\x05")) { // 处理Word 2003 (.doc) HWPFDocument doc = new HWPFDocument(inputStream); return ...
在Java编程环境中,将一个URL链接的内容转换为PDF文件是一个常见的需求,这通常涉及到网络请求、HTML解析以及PDF生成等多个步骤。以下是一个详细的步骤指南,涵盖了这个过程中的关键知识点: 首先,我们需要处理URL...
- 使用`setDocument`方法加载HTML内容,可以是URL、InputStream或String。 - 调用`render`方法,指定PDF输出流,完成转换。 3. **处理CSS和样式**: - Flying Saucer支持内联样式和外部样式表,确保HTML中的CSS...