当前位置: 首页 > 知识库问答 >
问题:

DataInputStream到底提供了哪些读取/块保证,下面是可用的()

潘泰
2023-03-14
...
streamState = waitOnStreamForState(stream, 4);
int i = stream.readInt();
...

private static int
waitOnStreamForState(DataInputStream stream, int nBytes) throws IOException {
    return waitOnStream(stream, nBytes, STREAM_ACTIVITY_THRESHOLD, STREAM_POLL_INTERVAL)
            ? STREAM_STATE_ACTIVE 
            : STREAM_STATE_INACTIVE;

private static boolean
waitOnStream(DataInputStream stream, int nBytes, long timeout, long pollInterval) throws IOException {
    int timeWaitingForAvailable = 0;
    while( stream.available() < nBytes ){
        if( timeWaitingForAvailable >= timeout && timeout > 0 ){
            return false;
        }
        try{
            Thread.sleep(pollInterval);
        }catch( InterruptedException e ){
            Thread.currentThread().interrupt();
            return (stream.available() >= nBytes);
        }
        timeWaitingForAvailable += pollInterval;
    }
    return true;
}

(是的,我意识到我的超时机制不准确)

共有1个答案

曹高阳
2023-03-14

这是否意味着下一次读取(在readInt()中)可能只读取2个字节,而随后完成检索整数的读取可能会阻塞?

上面是这么写的。但是,至少下一个read()不会阻塞。

我意识到readInt()是流“called next”的一个方法,但我认为它必须循环读取调用,直到它得到4个字节,并且文档没有提到后续调用。在上面的例子中,即使waitOnStreamForState(stream,4)返回stream_state_active,那么readInt()调用仍然可能阻塞吗?

    null
 类似资料:
  • 我正在调查我编写的一个定期运行的作业中的一个数据正确性问题,这个问题似乎是由BigQuery以非原子方式两次覆盖同一个表引起的。更具体地说,我在同一时间运行了同一查询的两个副本(由于重试逻辑),两个副本都设置为覆盖同一个表(使用WRITE_TRUNCATE选项),结果表的每一行都有两个副本。我希望一个查询用查询结果编写一个表,而另一个查询用相同的结果覆盖它,而不是以一个双倍大小的表结束。 我在设计

  • 本文向大家介绍HTML5标准提供了哪些新的API?你有用过哪些?相关面试题,主要包含被问及HTML5标准提供了哪些新的API?你有用过哪些?时的应答技巧和注意事项,需要的朋友参考一下 两个选择器API 地理定位API 多媒体API 拖放API 文件API XHR2 本地储存API canvas svg

  • 本文向大家介绍请问TCP用了哪些措施保证其可靠性相关面试题,主要包含被问及请问TCP用了哪些措施保证其可靠性时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、序列号、确认应答、超时重传 数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明了它下一次需要接收的数据序列号。如果发送发迟迟未收到确认应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方

  • 本文向大家介绍Kafka提供的保证是什么?相关面试题,主要包含被问及Kafka提供的保证是什么?时的应答技巧和注意事项,需要的朋友参考一下 答:生产者向特定主题分区发送的消息的顺序相同。 此外,消费者实例按照它们存储在日志中的顺序查看记录。 此外,即使不丢失任何提交给日志的记录,我们也可以容忍最多N-1个服务器故障。  

  • 本文向大家介绍npm提供了哪些钩子?各有什么作用?相关面试题,主要包含被问及npm提供了哪些钩子?各有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 npm 拥有以下的钩子命令:对于任何在 package.json 的 scripts 字段中定义的命令,可以通过 pre 以及 post 名称前缀,额外定义该任务在执行前、后的额外执行的钩子命令。例如: { "scripts": { "prem

  • Kotlin编译器给了我以下警告: 警告:(399,1)Kotlin:内联“…”的预期性能影响可能是无关紧要的。内联最适用于具有lambda参数的函数 在这种情况下,我想取消显示此警告。但是,我不知道给什么值,也找不到任何文档说明接受什么值。 可以为提供哪些可能的值,它们是什么意思?