行业资讯 2025年08月6日
0 收藏 0 点赞 235 浏览 2072 个字
摘要 :

文章目录 1.将Reader转换为InputStream 1.1Reader -> byte[] -> InputStream 1.2. Commons IO的ReaderInputStream 2.将InputStream转换为Reader 3.结论 在这个……




  • 1.将Reader转换为InputStream
    • 1.1Reader -> byte[] -> InputStream
    • 1.2. Commons IO的ReaderInputStream
  • 2.将InputStream转换为Reader
  • 3.结论

在这个简短的Java IO教程中,我们将学习如何将Reader转换为InputStream,以及如何将InputStream转换为Reader。请注意,Reader用于读取字符,而InputStream用于读取原始字节。两者设计目的不同,因此在使用它们时请小心。

1.将Reader转换为InputStream

Reader通常持有字符数据,通常是字符串或字符数组。如果我们有权访问String或char[],则可以直接从中获取InputStream。

try(InputStream inputStream = new ByteArrayInputStream(
    content.getBytes(StandardCharsets.UTF_8))){
  //Use InputStream
}

如果我们有对现有Reader的引用,则可以使用以下技术获取InputStream。

1.1Reader -> byte[] -> InputStream

我们从Reader获取内容到byte[],然后使用byte[]创建InputStream。这种转换过程可以通过多种方式实现,并使用不同的库。例如,让我们从原生IO API开始。

try(Reader reader = new BufferedReader(
    new StringReader(content))){
  char[] charBuffer = new char[8 * 1024];
  int numCharsRead;
  while ((numCharsRead = reader.read(charBuffer, 0,
      charBuffer.length)) != -1) {
    builder.append(charBuffer, 0, numCharsRead);
  }
}
try(InputStream inputStream = new ByteArrayInputStream(
    builder.toString().getBytes(StandardCharsets.UTF_8))){
  //Use InputStream
}

同样,我们可以使用Common IO的IOUtils.toString(reader)类从Reader读取内容到String。

String content = \"Hello world\";
try(Reader reader = new BufferedReader(new StringReader(content));
InputStream inputStream = IOUtils.toInputStream(IOUtils.toString(reader), Charsets.UTF_8);) {
    //Use InputStream
}

我们还可以使用Guava的CharStreams.toString(reader)类与前一个解决方案类似。

try(
    Reader reader = new BufferedReader(new StringReader(content));
    InputStream inputStream = new ByteArrayInputStream(
      CharStreams.toString(reader).getBytes(StandardCharsets.UTF_8))){
  //Use InputStream
}

1.2. Commons IO的ReaderInputStream

ReaderInputStream是InputStream的实现在读取字符流时不需要将底层的Reader包装在BufferedReader中。

所有的read()操作都进行了缓冲,因此不需要将底层的Reader包装在BufferedReader中。

try(Reader reader = new StringReader(\"Hello world\");
    InputStream inputStream = new ReaderInputStream(reader, StandardCharsets.UTF_8);){
  //Use inputStream
}

2.将InputStream转换为Reader

Java有InputStreamReader,它的设计目的就是做这个。这个类充当字节流到字符流的桥梁。

为了获得最高的效率,考虑将InputStreamReader包装在BufferedReader中。

InputStream inputStream = new ByteArrayInputStream(\"Hello world\".getBytes());
Reader reader = new BufferedReader(new InputStreamReader(inputStream));

3.结论

在这个Java IO教程中,我们学习了如何使用简单易懂的示例在Reader和InputStream之间进行转换。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9494.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号