java-Java 里把 InputStream 转换成 String 的几种方法

2024-05-25 13:18

本文主要是介绍java-Java 里把 InputStream 转换成 String 的几种方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 使用 JDK 5 的 Scanner

package cc.unmi.test;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Scanner;/*** * @author Unmi* @Creation date: 2013-02-01*/
public class Test {/*** @param args* @throws FileNotFoundException */public static void main(String[] args) throws FileNotFoundException {InputStream inputStream = new FileInputStream("d:/sample.txt");Scanner scanner = new Scanner(inputStream, "UTF-8");String text = scanner.useDelimiter("\\A").next();System.out.println(text);scanner.close();}
}

2. JDK1.4 及之前的 BufferedReader 法

package cc.unmi.test;import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;/*** * @author Unmi* @Creation date: 2013-02-01*/
public class Test {/*** @param args* @throws IOException */public static void main(String[] args) throws IOException {InputStream inputStream = new FileInputStream("d:/sample.txt");StringBuilder stringBuilder = new StringBuilder();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));boolean firstLine = true;String line = null; ;while((line = bufferedReader.readLine()) != null){if(!firstLine){stringBuilder.append(System.getProperty("line.separator"));}else{firstLine = false;}stringBuilder.append(line);}System.out.println(stringBuilder.toString());}
}

中间那些判断是不是第一行来决定是否加换行符是些杂音。

3. JDK1.4 及之前的 readBytes 法

package cc.unmi.test;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;/*** * @author Unmi* @Creation date: 2013-02-01*/
public class Test {/*** @throws IOException */public static void main(String[] args) throws IOException {InputStream inputStream = new FileInputStream("d:/sample.txt");byte[] buffer = new byte[2048];int readBytes = 0;StringBuilder stringBuilder = new StringBuilder();while((readBytes = inputStream.read(buffer)) > 0){stringBuilder.append(new String(buffer, 0, readBytes));}System.out.println(stringBuilder.toString());}
}

缓冲区的大小自己根据实际来调,比 BufferedReader 还简洁些,不需管换行符的事情。

本文原始链接 http://unmi.cc/java-convert-inputstream-to-string/, 来自 隔叶黄莺 Unmi Blog

4. Apache commons IOUtils.toString 法

package cc.unmi.test;import java.io.*;import org.apache.commons.io.IOUtils;/*** * @author Unmi* @Creation date: 2013-02-01*/
public class Test {/*** @throws IOException */public static void main(String[] args) throws IOException {InputStream inputStream = new FileInputStream("d:/sample.txt");String text = IOUtils.toString(inputStream);System.out.println(text);}
}

第三方库就是第三方库,人家充分考虑到了你的感受,你对 JDK 库的抱怨,多简洁,一行搞定。IOUtils 还能把内容拷入其他的 Writer 中,如 IOUtils.copy(inputStream, new StringWriter())。

5. Google guava 的  CharStreams 方法

package cc.unmi.test;import java.io.*;import com.google.common.io.CharStreams;/*** * @author Unmi* @Creation date: 2013-02-01*/
public class Test {/*** @throws IOException */public static void main(String[] args) throws IOException {InputStream inputStream = new FileInputStream("d:/sample.txt");String text = CharStreams.toString(new InputStreamReader(inputStream, "UTF-8"));System.out.println(text);}
}

CharSteams 不是直接作用在 InputSteam 上的,还要靠 InputStreamReader 拱个桥。

6. JDK 7 的 NIO readAllBytes

package cc.unmi.test;import java.io.IOException;
import java.nio.file.*;/*** * @author Unmi* @Creation date: 2013-02-01*/
public class Test {/*** @throws IOException */public static void main(String[] args) throws IOException {byte[] bytes = Files.readAllBytes(Paths.get("d:/sample.txt"));String text = new String(bytes);System.out.println(text);}
}

这让我们相信 JDK  一直还有人在管,虽然不可能象动态语言的方法那么快捷,上面的  readAllBytes 在处理大文件时肯定会很被动的。而 Files.readAllLines 会把文件的内容读入一个 List<String> 对象中,往内存不断放东西就得掂量下内存会不会被爆。在 java.nio.file.* 还有很多新事物可供发掘。

这篇关于java-Java 里把 InputStream 转换成 String 的几种方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001614

相关文章

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告:

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

Java中的Cursor使用详解

《Java中的Cursor使用详解》本文介绍了Java中的Cursor接口及其在大数据集处理中的优势,包括逐行读取、分页处理、流控制、动态改变查询、并发控制和减少网络流量等,感兴趣的朋友一起看看吧... 最近看代码,有一段代码涉及到Cursor,感觉写法挺有意思的。注意是Cursor,而不是Consumer

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问