为什么java的inputstream.close()会阻塞?

2024-01-11

我的 Java 程序使用 ProcessBuilder(redirectErrorStream 设置为 true),并有一个循环运行进程的输入流的 read 方法,该方法是阻塞的。然后我调用的外部程序停止等待输入和标准输入。我现在想终止该进程。这不是通过(在单独的线程中)调用进程的 destroy 方法,并调用输入流的 close 方法来阻止 read 方法再阻塞来完成的,以便我的初始线程可以结束其生命吗?

因为某些原因process.getInputStream().close()块。从 JavaDoc 我不明白为什么会发生这种情况。此外,我不明白为什么 javadoc 说“InputStream 的 close 方法什么也不做”。 (链接到 javadoc http://java.sun.com/javase/6/docs/api/java/io/InputStream.html#close())有人可以解释一下吗?

谢谢 :-)


关于阻塞行为,Java 中有一个已知问题,在与另一个进程通信时可能会导致死锁。我不知道这是否是您所看到的,但值得研究。该文件用于java.lang.Process http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Process.html says:

因为只有一些原生平台 提供有限的缓冲区大小 标准输入和输出流, 未能及时写入输入 流或读取输出流 子进程可能会导致 子进程阻塞,甚至 僵局。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么java的inputstream.close()会阻塞? 的相关文章

  • 使用 JPA/ORM 生成数据库模式是一个坏主意吗?

    Salve Part of 另一个问题 答案 https stackoverflow com questions 7595578关于 SO 以及其他声称相同的声明 如果您通过 JPA 更新数据库架构 但通常不是一个好的做法 您是否真的不应该
  • CopyOnWriteArraySet.add 和 remove 的重写等于

    我有像下面这样的课程 class A Override public boolean equals Object other return true Class B extends A Class C extends A Override
  • 检索和设置 IntelliJ IDEA 插件开发的拆分窗口设置

    我正在编写一个 IntelliJ IDEA 插件 用于保存打开选项卡的会话 称为选项卡会话 https github com alp82 idea tabsession 这个问题是后续问题IntelliJ IDEA 插件开发 保存选项卡组
  • 如何安装 C++ 的 VOCE?

    我正在尝试安装 VOCE api 它是为 C 和 Java 构建的语音识别 API 这是我第二次使用外部 C 库 也是第一次使用 Java C api 语音链接 http voce sourceforge net http voce sou
  • Spring Rest POST Json RequestBody 不支持内容类型

    当我尝试使用 post 方法发布新对象时 RequestBody 无法识别 contentType Spring 已经配置完毕 POST 可以与其他对象一起使用 但不能与这个特定对象一起使用 org springframework web
  • splitByWholeSeparatorPreserveAllTokens 和 split 之间的区别

    有什么区别StringUtils splitByWholeSeparatorPreserveAllTokens and String split With splitByWholeSeparatorPreserveAllTokens 我们可
  • Stream#limit 返回的元素是否可以少于预期?

    如果流s下面至少有n元素 流在什么情况下sLimit可能少于n元素 如果有的话 Stream sLimit s limit n 提问原因 在这个答案 https stackoverflow com a 28082107 829571 我读到
  • 为什么这不会导致 NullPointerException?

    public class Null public static void greet System out println Hello world public static void main String args Null null
  • 在 Java 中查询 XML 的最简单方法

    我有带有 XML 的小字符串 例如 String myxml
  • 如何加快 jar 签名者的速度?

    我使用 ant 来签署我的 jars 以进行网络启动部署 Ant signjar 在 Web 启动签名时非常慢 如何加快签名过程 我找到了一种可能的解决方案 早些时候 在构建脚本 ant signjar 中 按顺序调用所有 jar 我们使用
  • Java中通过FTP创建文件夹层次结构

    Java 是否有现成的功能可以在远程 FTP 服务器上创建文件夹层次结构 Apache Commons 确实提供了 FTP 客户端 但我找不到创建目录层次结构的方法 它确实允许创建单个目录 makeDirectory 但创建整个路径似乎并不
  • Ubuntu 的打包 - Web 应用程序

    Web 应用程序没有与 C 或类似文件不同的 make 文件 但是 它需要放置在特定的目录中 例如 var www 我是 Linux 打包新手 所以我的问题是 如何将我的应用程序打包到 deb 中 以便在安装时将其放入 etc myprog
  • 当另一个线程发生事情时从主线程获取数据?

    目前我有一个线程正在运行一个侦听连接的套接字 当它收到连接时 它需要上传在主线程中收集的数据 即从主线程获取数据 但是 我传递了对象的实例 但它从未使用等待连接时收集的数据进行更新 有没有正确的方法来做到这一点 我用谷歌搜索了一下 似乎找不
  • 如何强制初始化 Hibernate JPA 代理以在 JSON 调用中使用它

    我有一个 Spring 3 JPA 2 0 应用程序 在我的 Controller我需要一个初始化的对象 但我有代理 我需要能够以编程方式初始化它 我需要类似的功能org hibernate Hibernate initialize Obj
  • 我们可以用java定制一个垃圾收集器吗?

    我们知道java的垃圾收集器是一个低优先级线程 在java中我们可以创建任何具有高优先级的线程 那么是否有可能拥有我们自己定制的具有可变优先级的垃圾收集器线程 我们可以根据内存管理的级别进行设置 有人尝试过吗 如果是的话 您能分享一些关于如
  • Java中如何限制文件大小

    我正在我的应用程序中创建一个文件 并继续向该文件中写入一些内容 但是当我的文件达到一定大小 比如说 100 行 后 我想删除第一行并将新行写入底部 要求是我的文件应该受到限制 但它应该保留我写入文件的最新内容 请告诉我在Java中是否可行
  • Java Calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY),它会向后滚动、向前滚动还是未知?

    假设以下代码在 2009 年 8 月 22 日 星期六 执行 Calendar c Calendar getInstance c set Calendar DAY OF WEEK Calendar SUNDAY c get Calendar
  • JBoss 5 截断 base64 cookie 字符串的尾部 =

    从 JBoss 4 升级到 JBoss 5 后 我注意到最烦人的回归 它截断 base64 cookie 值的尾部等号 我花了很长时间才明白问题不是我的代码而是 JBoss 的 我用 google 搜索了一下 发现这是一个已知的问题issu
  • 如何使用 AEM 解析 org.apache.http.ssl?

    最终 我尝试在 Java 代码中使用 AWS S3 库来通过 AEM 启用服务器端 S3 上传 但在安装依赖项和 或由 AEM 识别时遇到了问题 每次我添加新的依赖项时 都会弹出五个问题 在我尝试构建的这个包中 这是我看到的错误 The i
  • 用于从链表中删除元素的大 O 表示法[重复]

    这个问题在这里已经有答案了 我正在阅读有关链接列表的内容 我发现 从链表中删除所需的元素需要 O n 运行时间 其中 n 是元素的数量 列表中的元素 http www cs mcgill ca dprecup courses IntroCS

随机推荐

  • 如何将代码从 O(n^2) 优化为 nlog(n)

    给定一个数字数组 以产生最大值的方式排列它们 例如 如果给定数字为 54 546 548 60 则排列 6054854654 给出最大值 如果给定的数字是 1 34 3 98 9 76 45 4 则排列 998764543431 给出最大值
  • 从数据库执行代码

    我有一个 PHP 代码存储在数据库中 我需要在检索时执行它 但我的代码是HTML和PHP的混合体 主要用在echo 看起来像我的代码的示例 echo Some Text var something more text anotherVar
  • WPF 应用程序不再显示主窗口

    我的应用程序构建并运行良好 我在任务栏中看到一个图标 显示该窗口存在 但它从未显示 我从 app xaml 调用 StartupUri MainWindow Xaml 而 mainwindow 仅包含一些函数和 InitializeComp
  • 在 Xcode 10 中找不到 -lstdc++.6 的库

    我无法在 Xcode Beta 和 GM 版本中构建基于 Cordova 的 iOS 应用程序 因为在此项目中使用 lstdc 6 为什么因为苹果已经弃用了 lstdc 6这个库在较新的 Xcode 版本中 所以我已经从Link Binar
  • 在 Activity 之间传递 ArrayList

    我已经实现了一个 Parcelable 类 public class Evento implements Parcelable private int private String private String imagen more at
  • 有没有办法通过一次操作从 TFS 中的各个文件夹中检出多个文件

    有没有办法通过一次操作从 TFS 中的各个文件夹中检出多个文件 我已经修改了多个目录下的多个文件 但我希望它们只需单击一次即可签出 也可以单击一次签入 Thanks 是的 使用 TFS 命令行客户端 tf exe 如果您有可用的 tf ex
  • window.pageYOffset 始终为 0,并且溢出-x: 隐藏

    我正在创建一个网页 其中包含一些仅需要在特定时间滑入的屏幕外内容 为了实现这一目标 我正在设置overflow x hidden on html body 这样用户就无法向左或向右滚动来获取内容 但是 在应用程序中的某个时刻 我还需要用户向
  • 在 iPhone 中重新定位后,框架/窗口尺寸“不正确”

    在我的 iPhone OS 应用程序中 我想要 需要 观察设备方向的变化 以便重新排列屏幕的某些部分 我使用的方法是使用CGRect frame UIScreen mainScreen applicationFrame获取屏幕尺寸 并从那里
  • Google iot MQTT - ESP32 首次连接,仅在 30m 后重新连接

    我正在使用 ESP32 与谷歌物联网云合作 我发送假值只是为了使用 MQTT 数据 PUB SUB 进行测试 显然我成功发布了值 有时 我无法重新连接到谷歌物联网 我不知道为什么它不断检查 wifi publishing 并且不检查 JWT
  • 闪亮的 selectizeInput:读取当前文本

    与闪亮选择输入小部件 https shiny rstudio com articles selectize html 用户可以输入文本以及从值列表中选择一个值 R中有没有办法读取文本的当前值 Added 我应该明确表示我希望能够阅读用户输入
  • Visual Studio 2010 中的状态栏?

    我试图在 Visual Basic 中的 Visual Studio 2010 Windows 窗体项目的工具箱中找到 System Windows Forms StatusBar 控件 我似乎看不到它 它位于 通用控件 或 容器 部分中的
  • PreferenceFragmentCompat 在 PreferenceCategory 上有填充,我无法摆脱

    所以我一直在尝试使用 androidx preference PreferenceFragmentCompat 创建一个设置活动 并且一切正常 然而 由于某种原因 偏好类别和偏好本身都存在一些填充 我设法通过使用 app iconSpace
  • Zend Framework 2 包括自定义库

    我的目录结构是这样的 c 工作区 Zend c 工作区 自定义库 自定义库是一个共享库 可以在其他应用程序中使用 它不使用命名空间 仅使用旧式下划线 我下载了 ZF2 Restful Module Skeleton 打算将其用作静态服务器
  • 如何模拟类的内部方法?

    我有一个有内部方法的类 我想模拟内部方法 但我无法模拟它 即它不是调用模拟函数而是调用原始函数 有什么办法可以实现这一点吗 编辑 实际上我是最小起订量的新手 我有很多类和类的方法来使用最小起订量进行测试 许多类是内部的 许多有内部方法 许多
  • 为什么我的 GitHub 页面不更新其内容?

    我一直在关注官方指南 pages github com https pages github com 到目前为止 我已经创建了本地存储库并将其推送到 GitHub 但是 无论我做什么更改 我都可以在 GitHub 的存储库中看到它 但是no
  • IE 中的多行按钮

    我目前处于一种可怕的情况 需要我在两行上设置 按钮 类型的输入样式 按钮上的固定宽度会导致按钮内的文本在除 IE 之外的所有其他浏览器中换行 因此 我的问题是 如何指定 value Button to Wrap 的输入在 IE 中换行到两行
  • 如何判断在 Dock 上放置过程中是否按下了修饰键

    我的 Cocoa 应用程序支持将文件拖放到其 Dock 图标上 但我希望根据是否按住修饰键 Command Option 等 来实现不同的行为 我尝试检查modifierFlags为了currentEvent 但无论是否按住修饰符 它们都是
  • 当我获取脚本时终端关闭(在开始时使用点运行)

    这是我的代码 bin bash if 1 then exit 0 fi array cat 1 let b array 1 count 0 for i in 1 7 do for j in 30 37 do for n in 40 47 d
  • 三元运算符的右结合性

    std cout lt lt true high pass false fail pass 是相同的 std cout lt lt true high pass false fail pass 既然三元运算符是右结合的 为什么我们不先进行右
  • 为什么java的inputstream.close()会阻塞?

    我的 Java 程序使用 ProcessBuilder redirectErrorStream 设置为 true 并有一个循环运行进程的输入流的 read 方法 该方法是阻塞的 然后我调用的外部程序停止等待输入和标准输入 我现在想终止该进程