从OutputStream创建InputStream的最有效方法

2023-12-04

这一页:http://blog.ostermiller.org/convert-java-outputstream-inputstream描述如何从OutputStream创建InputStream:

new ByteArrayInputStream(out.toByteArray())

其他替代方案是使用 PipedStreams 和新线程,这很麻烦。

我不喜欢将许多兆字节复制到内存字节数组中的新想法。 有没有一个图书馆可以更有效地做到这一点?

EDIT:

根据 Laurence Gonsalves 的建议,我尝试了 PipedStreams,结果发现它们并不难处理。 下面是 clojure 中的示例代码:

(defn #^PipedInputStream create-pdf-stream [pdf-info]
  (let [in-stream (new PipedInputStream)
        out-stream (PipedOutputStream. in-stream)]
    (.start (Thread. #(;Here you write into out-stream)))
    in-stream))

如果您不想一次将所有数据复制到内存缓冲区中,那么您将必须拥有使用 OutputStream(生产者)的代码和使用 InputStream(消费者)的代码。 )要么在同一个线程中交替,要么在两个单独的线程中并发操作。让它们在同一个线程中运行可能比使用两个单独的线程要复杂得多,更容易出错(您需要确保消费者never阻塞等待输入,否则实际上会死锁),并且需要让生产者和消费者在同一个循环中运行,这看起来耦合得太紧密了。

所以使用第二个线程。其实没那么复杂。您链接到的页面有合理的示例。这是一个有点现代化的版本,它也关闭了流:

try (PipedInputStream in = new PipedInputStream()) {
    new Thread(() -> {
        try (PipedOutputStream out = new PipedOutputStream(in)) {
            writeDataToOutputStream(out);
        } catch (IOException iox) {
            // handle IOExceptions
        }
    }).start();
    processDataFromInputStream(in);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从OutputStream创建InputStream的最有效方法 的相关文章

  • 任务“:app:dexDebug”执行失败

    我目前正在处理我的项目 我决定将我的 Android Studio 更新到新版本 但在我导入项目后 它显示如下错误 Information Gradle tasks app assembleDebug app preBuild UP TO
  • MP3:一种以毫秒为单位获取任何给定字节位置的位置的方法?

    我创建了一个 servlet 它返回从客户端请求的任何给定字节位置开始的流 来自 MP3 文件 这允许客户端在任何给定字节位置立即开始播放 而无需进行任何本地查找 现在 我有一个滑块可以直观地显示进度 我正在使用当前字节位置来更新滑块 但是
  • java.lang.Class: 在 java 程序中初始化 log4j 属性文件时出错

    我正在尝试使用 log4j 运行独立的 java 程序 但在调试时收到以下消息 控制台上没有 log4j 相关日志 log Logger 1343 java lang Class ERROR in 18b4aac2 有人可以建议这里出了什么
  • 将链接对象转换为流或集合

    我想迭代堆栈跟踪 堆栈跟踪由可抛出对象组成 其 getCause 返回下一个可抛出对象 最后一次调用 getCause 返回 null 示例 a gt b gt null 我尝试使用 Stream iterable 这会导致 NullPoi
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • 使用 Spring 时实例化对象,用于测试与生产

    使用 Spring 时 应该使用 Spring 配置 xml 来实例化生产对象 并在测试时直接实例化对象 这样的理解是否正确 Eg MyMain java package org world hello import org springf
  • Java 泛型/类型调度问题

    考虑以下程序 import java util List import java util ArrayList public class TypeTest public static class TypeTestA extends Type
  • Java:从元素创建 DOM 元素,而不是文档

    如您所知 在 Java 中创建 Dom 元素的正确方法是执行以下操作 import org w3c dom Document import org w3c dom Element Document d Element e e d creat
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • PropertySources 中各种源的优先级

    Spring引入了新的注释 PropertySources对于所有标记为的类 Configuration since 4 0 需要不同的 PropertySource作为论证 PropertySources PropertySource c
  • Spring Stomp over Websocket:流式传输大文件

    我的SockJs客户端在网页中 发送帧大小为16K的消息 消息大小限制决定了我可以传输的文件的最大大小 以下是我在文档中找到的内容 Configure the maximum size for an incoming sub protoco
  • 使用 Java 在浏览器中下载 CSV 文件

    我正在尝试在 Web 应用程序上添加一个按钮 单击该按钮会下载一个 CSV 文件 该文件很小 大小仅约 4KB 我已经制作了按钮并附加了一个侦听器 文件也准备好了 我现在唯一需要做的就是创建单击按钮时下载 csv 文件的实际事件 假设 fi
  • 为什么我在 Mac 上看到“java.lang.reflect.InaccessibleObjectException: Unable to make private java.nio.DirectByteBuffer(long,int)accessibl

    我已经在工作中愉快地构建代码好几天了 但突然我的一个项目 不是全部 失败并出现此错误消息 看看下面的答案吧 我是如何修复它的 起初我用谷歌搜索 看到很多有这个问题的人正在使用 Java 16 但我认为 错误 我正在使用 Java 11 因为
  • 具有多种值类型的 Java 枚举

    基本上我所做的是为国家编写一个枚举 我希望不仅能够像国家一样访问它们 而且还能够访问它们的缩写以及它们是否是原始殖民地 public enum States MASSACHUSETTS Massachusetts MA true MICHI
  • 不兼容的类型:在 java netbeans 中对象无法转换为 String

    我试图在我的项目中使用对象数组 但出现错误 incompatible types Object cannot be converted to String 在这一行 ST1 new String emt1 emt2 emt3 emt4 现在
  • 从 Stax XMLStreamReader 读取以解组部分

    我正在使用 Stax 游标 API 从大型 xml 文件中提取数据 当前 我转到特殊标签的开头并使用 JAXB 解组该标签 这对于格式良好的 xml 文件效果很好 但不久前我有一个文档 其中数十万个标签中有一个未关闭 JAXB 使用 XML
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 如何移动图像(动画)?

    我正在尝试在 x 轴上移动船 还没有键盘 我如何将运动 动画与boat png而不是任何其他图像 public class Mama extends Applet implements Runnable int width height i
  • 如何将实例变量传递到 Quartz 作业中?

    我想知道如何在 Quartz 中外部传递实例变量 下面是我想写的伪代码 如何将 externalInstance 传递到此作业中 public class SimpleJob implements Job Override public v
  • java中如何找到class文件的包

    我正在编写一个使用 class 文件的 java 程序 我希望能够读取文件系统上的 class 文件 使用 InputStream 并确定它所在的包 该 class 文件可能不在一个好的包目录结构中 它可能位于某个随机位置 我怎样才能做到这

随机推荐

  • Java BC SicBlockCipher直接输出等价于c#

    我正在用 C 实现一些东西 对此我有一个单独的规范 并且对我需要做什么有相当清楚的了解 但同时作为参考 我有一个 Java 实现 并且希望在本例中遵循 Java 实现 如下所示尽我所能 该代码涉及加密流 Java 源代码是here相关行在这
  • eclipse打开excel文件出错

    我收到以下错误 无法创建就地编辑器 这可能是因为没有 针对类型注册的 OLE 编辑器 您尝试打开的文件的名称 创建 Ole 客户端失败 结果 2147417851 我有MS Office 2007 Excel文件存储为 另存为2003版本
  • 如何将 ctypes 指针转换为 Python 类的实例

    假设您有以下 C 代码 typedef void PythonCallbackFunc void userData void cb PythonCallbackFunc pcf void userData pcf userData 以及以下
  • PHP 文件不写入当前目录?

    我在网络主机上有一个 PHP 文件 如下所示 但文件test txt当我从浏览器执行页面时不会创建 为什么不 是权限问题吗 是的 PHP 文档说 如果文件名不存在 则创建该文件 否则 现有文件将被覆盖 除非设置了 FILE APPEND 标
  • keytool 错误:java.lang.Exception:必须指定 -keyalg

    我正在尝试创建密钥对 并从 Windows 命令行提示符 使用 Windows 10 JDK 14 将它们存储在密钥存储中 这是我正在输入的命令 keytool genkey alias chris keystore chirskeysto
  • 异步/等待与线程

    在 Net 4 5 中 微软添加了新的Async Await简化异步编码的功能 然而 我想知道 Can Async Await完全取代旧的使用方式Threads Is Async Await有能力做任何事Thread可以做 异步 Can A
  • CakePHP - 创建一个编辑同一模型的多行的表单

    我正在尝试构建一个由属于主题组的主题组成的表单 从视觉上看 主题显示在页面上每个主题组标题下 您将能够编辑主题组或单个主题的名称 如果我给你一个 HTML 的例子 div class heading div
  • 找不到元素“赋值”的声明

    所以我从 XML 和模式开始 今天我遇到了这个 但我还没能弄清楚 我收到错误消息 Ln 5 Col 2 找不到 元素 赋值 的声明 我相信我已经声明了该元素 但也许我遗漏了一些东西并且没有声明 这是我的 XML 文件
  • 如何正确使用线性渐变?

    我对 CSS3 还很陌生 我的项目的 CSS 文件中有以下样式 headerDiv background image linear gradient 04519b 044687 60 033769 我很清楚什么linear gradient
  • Watson 检索和排名 - 手动排名

    我正在尝试建立一个排名器进行演示 我进行了 自动训练 并且得到了不错的结果 可能会更好 我正在尝试进行手动训练 但我对 Bluemix 在线文档中参数的含义感到困惑 https www ibm com watson developerclo
  • PayPal 沙盒错误:Cookie 被阻止

    我正在使用贝宝沙箱帐户 一切正常 但是 现在它显示以下错误 cookie 已启用 我尝试使用不同的浏览器和不同的计算机 我仍然遇到同样的错误 我尝试清除cookies和缓存 但这没有用 有什么解决办法吗 请开启cookies以结帐 这是 P
  • Rails 4 模型始终返回 nil

    我对以下错误感到疯狂 我有一个 User 类 它的两个属性 生日和created at gt datetime 总是返回nil 除了它在数据库上有一个值 我正在使用设备来管理身份验证 这是数据库表 CREATE TABLE users id
  • 使用容器中的第 n 个元素,但使用另一个键

    我有两个向量 一种实际保存数据 假设是浮动 另一种保存索引 我想通过nth element索引向量 但我希望通过实际保存数据的向量来完成比较 我正在考虑一个函子 但我猜这仅提供了 运算符 我通过将数据向量设为全局向量来实现这一目标 但这当然
  • 如何使用Reactor(Spring WebClient)进行重复调用?

    我使用 Reactor Spring5 WebClient 作为我的反应式编程 API 我有 2 个 REST 端点要调用 第一个结果将作为第二个结果的参数 对于第二个 API 它将返回带有 hasMore 值的结果 如果这个值是true
  • 为什么H1标签不需要CSS中的类或id?

    我只是查看我的 CSS h1 标签的定义如下 h1 当其他所有内容都有 id 或 时它前面的类 标题标签不需要这个的原因是什么 我是否真的犯了一个错误 而他们确实需要一个错误 这意味着所有发生的情况 of h1会分享相同的风格 同样 您可以
  • 与机器相关的 _write 失败,并显示 EINVAL 错误代码

    在实际问题之前 这有一些冗长的背景 但是 它需要一些解释 以期消除一些转移注意力的内容 我们的应用程序是用 Microsoft Visual C 2005 开发的 使用第 3 方库 我们幸运地拥有其源代码 来导出另一个第 3 方应用程序中使
  • Mongo 和 find 始终限制为 100 个地理数据

    在尝试尝试 mongo 性能时 我发现 mongodb 的行为很奇怪 首先我用以下查询填充它 for i 0 i lt 10000000 i db location insert id Math floor Math random 1000
  • Android xxhdpi、420 ​​dpi 和 480 dpi

    我面临下一个问题 我有一个values xxhdpi 及其dimensions xml 480 dpi 的设备非常适合此文件夹 问题是 例如三星 Galaxy S4 或 S5 会从该文件夹中捕获值 但在屏幕上看起来不太好 因为它们的分辨率为
  • JavaScript 专家请注意:需要 setInterval() 方面的帮助

    我正在尝试为房地产商店橱窗制作非交互式展示 我已经有一段时间没玩了setInterval 我的脚本第一次执行时 一切都很好 但是当它尝试通过以下方式获取下一个属性时getNextProperty 它开始变得混乱 如果您有 Firebug 或
  • 从OutputStream创建InputStream的最有效方法

    这一页 http blog ostermiller org convert java outputstream inputstream描述如何从OutputStream创建InputStream new ByteArrayInputStre