String和Xml之间的转换、String转InputStream

本文介绍了如何在Java中将字符串转换为XML文档,并提供了将XML文档转换回字符串的方法。通过具体的代码示例展示了使用DocumentBuilderFactory和TransformerFactory进行转换的过程。

// 字符串转XML

Java代码
1.String xmlStr = \"......\";  
2.StringReader sr = new StringReader(xmlStr);  
3.InputSource is = new InputSource(sr);  
4.DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
5.DocumentBuilder builder=factory.newDocumentBuilder();  
6.Document doc = builder.parse(is); 
String xmlStr = \"......\";
StringReader sr = new StringReader(xmlStr);
InputSource is = new InputSource(sr);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc = builder.parse(is);


//XML转字符串

Java代码
1.TransformerFactory  tf  =  TransformerFactory.newInstance();  
2.Transformer t = tf.newTransformer();  
3.t.setOutputProperty(\"encoding\",\"GB23121\");//解决中文问题,试过用GBK不行  
4.ByteArrayOutputStream  bos  =  new  ByteArrayOutputStream();  
5.t.transform(new DOMSource(doc), new StreamResult(bos));  
6.String xmlStr = bos.toString(); 
TransformerFactory  tf  =  TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.setOutputProperty(\"encoding\",\"GB23121\");//解决中文问题,试过用GBK不行
ByteArrayOutputStream  bos  =  new  ByteArrayOutputStream();
t.transform(new DOMSource(doc), new StreamResult(bos));
String xmlStr = bos.toString();

 

<think> 我们正在讨论如何将String转换InputStream。在Android开发中,这是一个常见的需求,例如当我们需要将一个字符串作为输入流传递给某个需要流的方法时(比如网络上传、文件写入或XML解析器等)。 根据引用[1]引用[2],有几种方法可以实现。下面我将介绍几种常用的方法,并给出代码示例。 ### 方法1:使用ByteArrayInputStream(最简单直接) 这是最常用的方法,通过将字符串按照指定编码(如UTF-8)转换为字节数组,然后创建字节数组输入流。 ```java String str = "Hello, World!"; InputStream inputStream = new ByteArrayInputStream(str.getBytes("UTF-8")); ``` 注意:这里指定了编码为UTF-8,避免平台默认编码带来的不一致性。 ### 方法2:使用IOUtils(Apache Commons IO库) 如果您项目中已经引入了Apache Commons IO库,可以使用IOUtils类来方便地转换: ```java import org.apache.commons.io.IOUtils; String str = "Hello, World!"; InputStream inputStream = IOUtils.toInputStream(str, "UTF-8"); ``` 但请注意,Android开发中通常不推荐引入大型库,所以如果没有使用该库,建议使用方法1。 ### 方法3:通过ByteArrayOutputStream(不常用,但可了解) 引用[2]中提到了一个方法,但实际上这种方法通常用于将InputStream转换String,反向转换并不需要这么复杂。所以这里不推荐,但为了完整性,我们也可以这样写(实际上等同于方法1): ```java import java.io.ByteArrayOutputStream; import java.io.IOException; public static InputStream stringToInputStream(String str, String encoding) throws IOException { // 这里实际上不需要通过ByteArrayOutputStream,因为字符串可以直接字节数组 // 但为了演示,可以这样: byte[] bytes = str.getBytes(encoding); return new ByteArrayInputStream(bytes); } ``` ### 注意事项: 1. **编码问题**:务必指定正确的字符编码(如UTF-8),否则使用平台默认编码可能导致乱码。 2. **异常处理**:转换过程中可能抛出`UnsupportedEncodingException`,需要捕获或声明抛出。 3. **资源关闭**:使用完InputStream后,记得关闭流以释放资源(可以使用try-with-resources,或者在finally块中关闭)。 示例(包含异常处理关闭流): ```java try (InputStream is = new ByteArrayInputStream("Hello".getBytes(StandardCharsets.UTF_8))) { // 使用输入流 } catch (IOException e) { e.printStackTrace(); } ``` ### 应用场景举例 在Android开发中,将StringInputStream的场景包括: - 将字符串上传到服务器(如通过HTTP的POST请求上传文本内容)[^3]。 - 将字符串保存为文件(通过FileOutputStream写入,但需要先将字符串InputStream,再通过管道流或者手动读取写入)。 - 解析XML/JSON数据:如果有一个XML/JSON字符串,而解析器需要InputStream,则可以使用此转换。 ### 相关问题 1. Android中如何将InputStream转换String? 2. 在Android开发中,如何正确处理流的编码问题? 3. 如何将文件内容读取为字符串? 4. 如何将字符串保存到Android设备的文件中? 希望这些方法能帮助您解决问题。 </think>### 在 Android 开发中将 String 转换InputStream 的方法 在 Android 开发中,将 `String` 转换为 `InputStream` 是常见的需求(例如处理网络请求、文件操作或 XML 解析[^1])。以下是三种可靠的方法: --- #### 方法 1:使用 `ByteArrayInputStream`(最常用) ```java String data = "需要转换字符串内容"; InputStream inputStream = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8)); ``` - **原理**:通过 `getBytes()` 将字符串为字节数组,再用 `ByteArrayInputStream` 包装 - **优点**:无需第三方库,代码简洁高效 - **编码注意**:必须指定字符编码(推荐 `UTF_8`),否则使用平台默认编码可能导致乱码[^2] --- #### 方法 2:使用 Apache Commons IO 库 ```java // 添加依赖:implementation 'commons-io:commons-io:2.11.0' import org.apache.commons.io.IOUtils; String data = "需要转换字符串内容"; InputStream inputStream = IOUtils.toInputStream(data, StandardCharsets.UTF_8); ``` - **优点**:单行代码完成转换,可读性高 - **缺点**:需引入额外依赖库 --- #### 方法 3:手动实现(适合无依赖场景) ```java public InputStream stringToInputStream(String data) throws IOException { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); outputStream.write(data.getBytes(StandardCharsets.UTF_8)); return new ByteArrayInputStream(outputStream.toByteArray()); } ``` - **流程**: 1. 创建 `ByteArrayOutputStream` 临时存储字节 2. 将字符串写入输出流 3. 通过 `toByteArray()` 获取字节数组 4. 用 `ByteArrayInputStream` 包装结果[^2] --- ### 关键注意事项 1. **字符编码** 必须显式指定编码(如 `StandardCharsets.UTF_8`),避免使用 `getBytes()` 无参方法: ```java // 错误示例(依赖系统默认编码) InputStream badStream = new ByteArrayInputStream("文本".getBytes()); // 正确做法 InputStream goodStream = new ByteArrayInputStream("文本".getBytes(StandardCharsets.UTF_8)); ``` 2. **资源释放** 使用后需关闭流防止内存泄漏: ```java try (InputStream is = new ByteArrayInputStream(str.getBytes(UTF_8))) { // 使用输入流... } // 自动关闭 ``` 3. **性能优化** 大文本处理建议分块读写,避免一次性加载全部内容到内存。 --- ### 典型应用场景 1. 网络请求中上传字符串内容(如 POST JSON 数据)[^3] 2. 将字符串保存为本地文件: ```java String fileContent = "文件内容"; try (InputStream is = new ByteArrayInputStream(fileContent.getBytes(UTF_8)); FileOutputStream fos = new FileOutputStream("test.txt")) { IOUtils.copy(is, fos); // Apache Commons IO 简化复制 } ``` 3. XML/JSON 解析器(如 `XmlPullParser`)需要输入流[^1] --- ### 相关问题 1. Android 中如何将 `InputStream` 反向转换为 `String`? 2. 处理大文件时如何避免 `OutOfMemoryError`? 3. 不同字符编码(UTF-8/GBK)转换时如何处理乱码问题? 4. 如何将 `InputStream` 直接上传到服务器?[^3] [^1]: StringInputStream 相互转换是常见需求 [^2]: 通过 ByteArrayOutputStream 中可实现转换 [^3]: 上传流数据到服务器需要正确处理流
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值