问题的背景是需求要生成一个文件动态生成下载,我为了偷懒,采用了生成字符串,然后转成inputsteam流输出,
参考了别人的代码如下:
写道
1. String --> InputStream
Java代码
InputStream StringToInputStream(String str){
ByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes());
return stream;
}
InputStream StringToInputStream(String str){
ByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes());
return stream;
}
2. InputStream --> String
Java代码
String inputStreamToString(InputStream is){
BufferedReader in = new BufferedReader(new InputStreamReader(is));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = in.readLine()) != null){
buffer.append(line);
}
return buffer.toString();
}
但是在实际string转的过程InputStream 中,会发现生成的文件中中文出现乱码,这个情况,主要是因为胃这句代码:
ByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes());
因为是把str.getBytes()了,所以string转换成的字节为utf-8,所以改成
ByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes("gbk"));
改成gbk就可以了,下面附录写java常见的编码格式,大家如果有类似的字符串问题,就在中间转化下:
写道
Charset
描述
US-ASCII 7 位 ASCII 字符,也叫作 ISO646-US、Unicode 字符集的基本拉丁块
ISO-8859-1 ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1
UTF-8 8 位 UCS 转换格式
UTF-16BE 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序
UTF-16LE 16 位 UCS 转换格式,Little-endian(最高地址存放低位字节)字节顺序
UTF-16 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识
分享到:
相关推荐
类型转换是一个常见的编程问题,通过stringstream可以轻松实现各种类型之间的转换。 首先,我们定义了一个toString函数模板,用于将各种数值转换成字符串。该函数模板使用ostringstream对象将输入的数值转换成字符...
在C++中,我们可以使用`std::stringstream`和`std::hex`来实现字符串到16进制的转换,以及`std::stringstream`和`std::dec`来实现16进制到字符串的转换。 1. **字符串到16进制转换:** 在C++中,可以逐个字符处理...
此外,还可以使用`System.Convert`类中的`ToBase64String`和`FromBase64String`方法来将二进制数据转换为Base64编码的字符串,这种方式非常适合在网络上传输二进制数据。 #### 三、Stream与byte[]之间的转换 在...
在C++中,`sstream`主要包括三个类:`istringstream`、`ostringstream`和`stringstream`,它们都继承自`std::basic_ios`,并且分别提供了输入(input)、输出(output)和双向(bidirectional)的串流操作。...
如果我们在使用 Axis2 时抛出了 org.apache.axis2.AxisFault: The input stream for an incoming message is null 异常,就说明 services.xml 中没有加入 scope="transportsession"。解决方法是将 services.xml 配置...
1. **使用标准库函数`std::stringstream`和`std::hex`**: 我们可以创建一个`std::stringstream`对象,然后设置其转换标志为`std::hex`,这样它可以处理十六进制字符串。接着,读取字符串,将其解释为十六进制,...
- 将Stream转换为byte[],我们可以读取Stream的长度并创建相应大小的字节数组,然后读取数据: ```csharp public byte[] StreamToBytes(Stream stream) { byte[] bytes = new byte[stream.Length]; stream.Read...
在Java开发中,数据序列化和反序列化是一项常见的任务,它允许我们将对象的状态转换为可以存储或传输的形式,然后再恢复。XStream是一个强大的库,它使得XML与Java对象之间的转换变得简单。在这个主题中,我们将深入...
在Java中,我们可以借助Java API for XML Processing (JAXP) 来实现XSLT转换,它提供了对XML解析和XSLT转换的支持。 首先,我们需要理解XML和XSLT的基本概念。XML(eXtensible Markup Language)是一种标记语言,...
这两种流可以相互连接,实现数据的转换和过滤。 IOStreams的主要目的是处理输入和输出数据,以及进行格式化和代码转换。在数据处理中,内部表示的数据通常以字节序列的形式存在,但为了使人类能读懂,这些数据需要...
private void saveImage(InputStream stream, String fileName) { // 实现图片保存到服务器的具体逻辑 } } ``` **4. 安全与优化:** 在实际应用中,需要考虑图片大小限制、文件类型检查、文件名安全处理(防止...
1. 引入依赖:为了在Java项目中使用XSLT,你需要引入`javax.xml.transform`和`javax.xml.transform.stream`这两个包,它们包含处理XSLT转换所需的核心类。如果你使用的是Maven或Gradle,可以添加相应的依赖。 2. ...
在Java的IO体系中,Input和Output主要涉及流(Stream)的概念,流是处理输入和输出的基本方式。流分为两种类型:以字节为导向的流和以...通过理解这些基本概念和流的类型,开发者可以有效地实现数据的读取、转换和存储。
4. **资源管理**:及时关闭文件和流以避免资源泄露。 #### 六、总结 通过本文的学习,你应该已经掌握了如何使用Java进行图片格式转换的基本技巧。理解并熟练运用`ImageIO`类的方法是进行图像处理的关键。希望这些...
在IT领域,编码格式是处理文本数据时至关重要的部分,特别是在多语言环境下。本文将深入探讨几种常见的编码格式,如GB2312、...在实际开发中,我们还需要根据具体需求,结合Stream类进行更复杂的数据读写和转换操作。
在C++编程中,文件读写、进制转换和绘图是重要的技能,它们在许多实际项目中都有着广泛的应用。让我们逐一深入探讨这些知识点。 **文件读写操作**: 在C++中,我们可以使用标准库中的`fstream`来处理文件的读写。`...
Java作为一种强大的编程语言,提供了许多库和工具来处理这种转换。本篇文章将详细探讨如何使用Java将TXT文本文件转换为PDF,并解决中文字符显示问题。 首先,我们需要理解TXT和PDF这两种文件格式。TXT文件是最基本...
Java中主要分为两种流:输入流(Input Stream)和输出流(Output Stream)。 ##### 2. InputStream 类 - **2.1 read 方法** `InputStream`类中的`read`方法用于从指定的输入流读取数据,主要有三种形式: 1. `int ...
在C++中,我们可以利用`std::stringstream`、`std::hex`和`std::uppercase`来实现URL编码。首先,我们需要将非字母数字字符转换为其ASCII值,并将其转换为16进制字符串。接着,我们使用`std::replace`或`std::string...
虽然 `std::string` 提供了非常方便的操作接口,但在某些高性能场景下,需要注意其内部实现机制,尤其是字符串复制和重新分配内存的问题。例如,在频繁地添加字符或子串到一个 `std::string` 对象时,可能会触发多次...