如何终止 BufferedInputStream .read() 调用

2023-11-29

我正在编写一个程序来从服务器下载非常大的文件(~2GB)。我编写的程序能够恢复部分完成的下载,

为了模拟糟糕的互联网连接,我在下载过程中将以太网线从路由器中拔出。不幸的是,这导致我的程序挂起以下调用:while((bytesRead = in.read(data)) > 0)

(其中 bytesRead 是一个 int,in 是从 HttpURLConnection 构建的 BufferedInputStream,而 data 是一个字节数组)。

我尝试通过在另一个线程上调用 in.close() 来“中断”调用,但直到互联网连接恢复(此时抛出异常),它才会生效。

有什么办法可以防止互联网连接中断而冻结我的程序吗?


我发现唯一可靠的方法是实例化Socket as an InterruptibleChannel,并对卡住的 IO 线程执行中断。 (顺便说一句,你不必使用带有 InterruptibleChannels 的异步 NIO 调用,阻塞 I/O 工作得很好,你只是有一个非常好的和统一的方式来踢卡住的交换)

虽然,看起来像URLConnection不允许您连接自定义套接字工厂。

也许你应该调查一下Http客户端来自阿帕奇。

EDIT

以下是创建可中断套接字的方法。

import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.nio.channels.SocketChannel;

final SocketAddress remoteAddr =
    new InetSocketAddress(
        serverAddress,
        servicePort
    );

final SocketChannel socketChannel = SocketChannel.open( );

socketChannel.connect( remoteAddr );

// Here java.io.Socket is obtained
Socket socket = socketChannel.socket( );

我没有 HttpClient 示例,但我知道您可以自定义套接字初始化。

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

如何终止 BufferedInputStream .read() 调用 的相关文章

  • Hashmap并发问题

    我有一个哈希图 出于速度原因 我希望不需要锁定 假设我不介意过时的数据 同时更新它和访问它会导致任何问题吗 我的访问是获取 而不是迭代 删除是更新的一部分 是的 这会导致重大问题 一个例子是向散列映射添加值时可能发生的情况 这可能会导致表重
  • 无法在类对象的 ArrayList 中存储值。 (代码已编辑)

    这基本上是一个 Java 代码转换器 它涉及一个 GUI 让用户输入类类型 名称和方法 为了存储值 我创建了一个类VirtualClass与ArrayList
  • MongoTemplate upsert - 从 pojo 进行更新的简单方法(哪个用户已编辑)?

    这是一个简单的 pojo public class Description private String code private String name private String norwegian private String en
  • 使用 Java 在 WebDriver 中按 Ctrl+F5 刷新浏览器

    我已经使用 java 刷新了 WebDriver 中的浏览器 代码如下 driver navigate refresh 如何使用 Java 在 WebDriver 中按 Ctrl F5 来做到这一点 我认为您可以使用 WebDriver 和
  • 使用 ChannelExec 的命令未执行 - Jsch

    我正在使用 Jsch 在服务器中创建一个文件并执行一些命令 对于文件创建 它工作正常 但是对于命令执行 则不然 它保持状态 1 仍在处理它 并永远保持该状态 这种情况发生在 shell 执行或我尝试成为 root 时 请按照以下方法操作 p
  • RMI 中的引用传递问题? [复制]

    这个问题在这里已经有答案了 有人可以告诉我我错在哪里 为什么这个 RMI 聊天应用程序不起作用 目标是通过远程对象或序列化对象实现客户端 服务器和逻辑之间的解耦 import javax swing import java awt even
  • 尝试使用 JRI 将 R 与我的 Java 应用程序集成,但出现错误。谁能解释一下原因和解决办法吗?

    我需要将 Java 与 R 集成来运行一些数学命令并使用 R 的功能进行绘图 以下部分代码给出了错误 public static void main String args HelloRWorld r new HelloRWorld r h
  • 请参阅 Java EE eclipse 调试中的 POST 参数

    我在调试 Java EE 方面没有经验 我更像是一个 javascript 人 我需要查看哪些 HTTP POST 参数到达服务器端 我在表单将其操作指向的 jsp 文件中放置了一个断点 现在我在调试变量窗口中找不到 POST 内容 他们在
  • Java Microsoft Excel API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JTable 和 JScrollpane 大小的问题

    我有一个JScrollPane with a JTable在里面 在里面JTable我最初有 3 行 稍后添加行 默认JTable我的 3 行很难看 因为JScrollPane calls getPreferredScrollableVie
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • Jenkins 的代码覆盖率 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何找到被点击的JLabel并从中显示ImageIcon?

    这是我的代码 我想知道哪个l单击 然后在新框架中显示该 ImageIcon e getSource 不起作用 final JFrame shirts new JFrame T shirts JPanel panel new JPanel n
  • JSch中如何设置文件类型和文件传输模式?

    我使用 Apache Common NetFTPClient并设置了我的ftpClient在上传文件之前使用如下所示的方法 ftpClient setFileType FTP BINARY FILE TYPE ftpClient setFi
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • 警告:无法更改每个人的权限:

    当运行 Java 快速入门示例时https developers google com drive web quickstart java hl hu https developers google com drive web quicks
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 对于当前月份和日期但年份不同的日期,经过的月份计算未给出正确的结果

    我正在尝试计算自特定日期以来经过的月份 该函数工作正常 尽管如果我将今天的日期与过去的不同年份放在一起 它会给我一个月的差异 不到一个月 假设对于所有日期 该函数都运行良好 除了 如果今天是 2014 03 06 YYYY MM DD 并且
  • 失败时石英重试

    假设我有一个这样配置的触发器
  • 摩尔斯电码 至 英语

    我现在的问题是让 摩尔斯电码转英语 正常工作 将英语转换为莫尔斯电码的第一部分工作正常 我知道以前已经有人问过这个问题 但我不知道我做错了什么 我知道我需要在某个地方进行拆分 但我只是不确定将其放在代码中的何处 现在 莫尔斯电码到英语的部分

随机推荐

  • 张量流有问题吗?

    你好我一直在使用tensorflow and keras一阵子 我使用这个包来构建神经网络 当我在 CPU 上工作时 我常常收到这样的消息 您的 CPU 支持此 TensorFlow 二进制文件未编译为使用的指令 AVX AVX2 但现在
  • HttpWebRequest 未传递凭据

    我正在尝试使用HTTPWebRequest访问 REST 服务 但在传递凭据时遇到问题 请参阅下面的代码 我读过NetworkCredential不支持 SSL 并且我正在访问 HTTPS 站点 有谁知道类似的类NetworkCredent
  • DatePicker 显示错误的月份值

    我有一个问题DatePicker在android中 当我使用getMonth 方法 那么它将返回错误的值 例如 DatePicker datepicker new DatePicker int day date getDayOfMonth
  • GPU内存更新原子性

    我有一个主要的全局记忆 gpu mem 以及一个变量 gpu mem offset 来跟踪线程将更新其内容的全局内存的当前偏移量 下面的脚本能否保证内存内容和偏移值的原子性 global void kernel int gpu mem in
  • C语言中两个字符串之间的冒号是什么?

    我正在尝试编辑 IDT 中断描述符表 我发现这段代码这应该让我可以访问该结构 但我不明白冒号是什么asm莱恩群岛我猜这是一些用 C 语言编写的位图游戏 这在某种程度上填充了指令 但我找不到任何明确的东西 如果有帮助 编译器现在会说 inva
  • Python:将文本加载为Python对象[重复]

    这个问题在这里已经有答案了 我有这样的文本要加载 https sites google com site iminside1 paste我更喜欢从中创建一个 python 字典 但任何对象都可以 我试过pickle json and eva
  • 如何在 Windows 上为 ruby​​ 安装“byebug”?

    我是 ruby 新手 正在尝试设置我的开发环境 Windows 10 我已经安装了ruby和rails 但无法安装byebug 据我了解 我首先需要 DevKit 所以我按照这里的指南安装了它 https github com onecli
  • 当派生类方法不可行时,为什么 C++ 重载决策不查看基类方法? [复制]

    这个问题在这里已经有答案了 编译失败的例子 class A public int f int a return a class B public A public int f int a int b return a b int calcu
  • Tkinter IntVar 返回 PY_VAR0 而不是值

    我有一个复选按钮和一个IntVar与之关联的对象 但是当我尝试获取该值时var 我正在接收PY VAR0 这是我的代码 from tkinter import root Tk def show state print var var Int
  • 具有多个依赖项的 jQuery ajax 调用链

    我不太懂魔法deferred使用 jQuery 的对象 假设以下代码 function callWebService uri filter callback var data if filter filter data filter fil
  • jQuery animate() 更改文本

    我现在刚刚迈出了关于 jQuery animate 的第一步 我试图制作一个演示类型的东西只是为了练习 但我似乎无法使用 animate 函数更改动画中间的 div 文本 这是我当前的代码
  • pandas 中 max 的列标签

    我正在尝试从 pandas 数据框中提取行和贡献列标签中的最大值 例如 A B C D index x 0 1 2 3 y 3 2 1 0 我期望以下输出 A B C D Maxv Con index x 0 1 2 3 3 D y 3 2
  • 在 Firestore for Swift 中按时间戳传递和过滤项目

    我正在尝试在 Firestore 中传递今天的日期Timestamp在我的应用程序中 我得到这样的今天的日期 formatter dateFormat MMMM d yyyy let result formatter string from
  • 运行 Android 4.04 的 socket.connect() Galaxy Tab 2 上出现 NullPointer 异常

    我似乎在 socket connect 上遇到了这个奇怪的错误 09 18 14 41 22 968 W System err 2593 java lang NullPointerException 09 18 14 41 22 968 W
  • 我可以安装旧版本的 VS 扩展“Web Essentials 2012”吗?

    它删除了我一直依赖的 TypeScript 功能 现在我早上的工作效率看起来相当不错 我使用的是一台干净的机器 但它已经引入了新的 3 0 版本 该版本缺少我最受益的部分 您可以使用以下链接将版本恢复到 2 9 http vswebesse
  • 相当于iOS中的R

    在 android 中 我们有代表资源的 R 类 其中我们引用了所有资源 并且可以在代码中轻松访问它们 iOS 中有类似的吗 我有这个疑问 因为我希望能够定义具有不同值的多个文件 例如 ViewController1 的默认值 ViewCo
  • 将 PredicateBuilder 与 VB.NET 结合使用

    我已在单独的 C 项目中重新创建了 Predicatebuilder 类 并尝试在 VB NET 项目中使用它 但我不断收到以下错误 重载解析失败 因为没有可访问的 或 接受此数量的参数 当我像这样使用它时 Dim predicate Pr
  • XCeed PropertyGrid 自定义 IntegerUpDown

    我试图将不同的增量值分配给对象的不同字段 例如 考虑一个班级有谁int1 and int2 当我设置ShowAdvancedOptions为我的真实PropertyGrid 整数向上向下按钮放入文本框中没有问题 但我希望能够编辑数字单独增加
  • 如何在gganimate中使两帧之间的过渡时间更长

    我正在使用 gganimate 创建散点图的多个帧的动画 每个帧对应于一年 我想强调两个特定的连续帧之间的变化 以便这两个帧在其他帧中脱颖而出 但我不知道该怎么做 这是我的数据和代码的示例 structure list x 1 6 y 2
  • 如何终止 BufferedInputStream .read() 调用

    我正在编写一个程序来从服务器下载非常大的文件 2GB 我编写的程序能够恢复部分完成的下载 为了模拟糟糕的互联网连接 我在下载过程中将以太网线从路由器中拔出 不幸的是 这导致我的程序挂起以下调用 while bytesRead in read