InputStream如何判断数据已经读取结束

在不知道流的长度下,怎样判断从socket中读取的字节流结束? 我尝试过使用read() = -1这种方法来判断是否读完字节流Java代码 DataInputStream in = new DataInputStream(socket.getInputStream());   ByteArrayOutputStream swapStream = new ByteArrayOutputStream();   int read =  阅读详情

什么叫读取结束?那个is.read()得到的-1是怎么来的呢?

举个例子,我给你发数据,
1 我发你一个
2 你接收一个
3 我等。。。。。。
4 你呢? 你怎么知道我是继续发,还是已经发完了呢?因为你无法确定所以
4.1 如果你设定了超时等待时间 ,那么超过这个时间,你就会认为没有数据了
4.2 如果没有,我看你只好继续等,等。等。。。。。。。。。。。。。。

我想我说的很明白了吧。

对于文件,操作系统在你读取到最后一个字节后,会自动不允许你读取的,判断文件是否结束很简单。但Socket不行

解决的方法有3个
1 约定发送的数据长度,比如 http的 keepAlive 就是必须依赖这个的 Content-Length
2 设置超时的时间,根据我的经验,只有在Socket级别设置才有效.
Socket socket = new Socket(host,port);
socket.setSoTimeout(100); // 如果超过100毫秒还没有数据,则抛出 SocketTimeoutException


3 让发送端发送完数据后,关闭连接。 这个在Http的操作时很常见。


inputStream.read方法阻塞解析以及读取数据不全 目前在做一个串口通信的app,过程中pc模拟单片机给开发板串口发送命令时候出现了问题,inputStream.read方法一直阻塞,完全无法读取到数据,用了网上一个方法,while判断size=-1时候跳出循环,实际上,根本不会跳出去。 read方法是这样的: *Reads some number of bytes from the input stream and stores them ... 阅读详情

相关推荐

记一次Socket通信InputStream中数据读取不完整踩坑

记一次Socket通信InputStream中数据读取不完整踩坑 问题代码: String message="ceshibaowen"; Socket socket=new Socket(socketIP,socketPort); socket.setSoTimeout(120000); DataInputStream in=new DataInputStream(socket.getInputStream()); OutputStream out=socket.getOutputStream(); out

weixin_43861609的博客 3711

InputStream在使用完后,不关闭流,想复用怎么办?

1.以ByteArrayInputStream为例先看代码package test; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; public class Test { public static void main(String[] args) { ...

MengUer的博客 1万+

Qt之QSqlTableModel:高效数据库操作与视图绑定的实战指南

本文深入探讨了Qt框架中的QSqlTableModel组件,它作为连接数据库与Qt视图的智能中介,能极大简化数据库的增删改查操作。通过实战代码演示,详细讲解了如何快速构建可编辑的数据表格、理解并设置关键的数据编辑策略(如OnManualSubmit),以及实现数据过滤、排序等高级功能。文章还提供了性能优化、事务处理及常见避坑指南,帮助开发者高效、稳健地开发数据库驱动的桌面应用。

y4z5a6b7的博客 440

HttpServletRequest获取输入流多次读取的问题

HttpServletRequest只能获取一次输入流的解决方案

goody9807的专栏 3840

单精度浮点数存储、双精度浮点数存储

单精度浮点数存储、双精度浮点数存储

fancynthia的博客 1318

探索Python融合地学:一文解决osgeo库安装失败问题

总结一下,要安装osgeo模块,关键在GDAL依赖库的安装,如果能够顺利安装GDAL依赖库,因其是osego的模块,因此osgeo的部分模块也能够得到自动安装,此时再运行代码,发现代码并不报错,能够正常运行了。第一步,我们要安装imagecodecs库,它支持多种常见的图像格式,当然也包含我们的目标tif格式,为方便后续的图像处理和安装osgeo模块,先安装此库。目前GDAL已经更新到了3.10版本,这里主要看你的Python版本是上面,小编用的是Python3.13,电脑是64位的,因此,我们选择。

Promising_GEO的博客 5463

InputStream中的read() 与 available() 方法比较

这篇文章是转载的,原文链接为: https://blog.youkuaiyun.com/alpslzy/article/details/42175257 1. 关于InputStream.read() 在从数据流里读取数据时,为图简单,经常用InputStream.read()方法。这个方法是从流里每次只读取读取一个字节,效率会非常低。     更好的方法是用InputStream.read(byte[...

天大会下雨的博客 3400

MFC使用Websocket通讯介绍和实例(附完整源码)

踩坑点,下载了好几个boost版本编译,经常出问题,后来搜索了好久资料才发现如下评论:WebSocket++0.8.2 has been tested through Boost 1.72。WebSocketpp依赖于boost,因此在使用WebSocketpp前需要编译Boost;所以我们直接下载Boost 1.72的windows版的进行安装,安装完成还需要编译;WebSocketpp也叫WebSocket++;服务编译好之后,使用。

weixin_42530684的博客 1171

java判断文件结束_关于java读取文件时,如何判断读取文件是否到达末尾?

一、前言java读取文件时,如果到达文件末尾,再进行读取时会发生异常,所以我们需要判断读取文件已经到达末尾。对于文件读取我们通常会采用不同的读取方式,如用InputStream流读取字节流、用Reader字符输入流的方式进行读取或者通过BufferedReader的行读取方式readLine方式,对于不同的方式读取到文件末尾时,都会返回特殊标识值-1或者null,下面具体上面几次方式符合判断文件是...

weixin_42515631的博客 6163

老N卡福音:GT1030/GTX1050在MacOS Ventura 13.2上的完整驱动指南(附实测截图)

本文详细介绍了如何在MacOS Ventura 13.2上通过OCLP工具链驱动GT1030和GTX1050等老款NVIDIA显卡,涵盖硬件兼容性验证、BIOS设置、OpenCore配置、驱动安装及性能测试全流程。实测数据显示,这些基于Pascal和Maxwell架构的显卡在当代MacOS系统中仍能发挥实用价值,为老N卡用户提供完整解决方案。

weixin_30832143的博客 633

解决ArcGIS-OpenStreetMap Toolbox-Load OSM File错误

在安装成功OpenStreetMap Toolbox后,首次运行Load OSM File工具,出现以下错误

Zjf的博客 8820

安卓蓝牙串口中InputStream数据接收不完整,已解决

问题描述      先描述一下问题,烦了我一段时间。我是在单片机上使用HC05蓝牙模块和安卓手机进行通讯,从手机往单片机发送正常,从单片机往手机发数据总是不完整,一段字符被分成几段了,安卓的程序用的是谷歌官方的BluetoothChat例程。分析原因            分析了一下原因,谷歌官方的BluetoothChat读取线程的代码如上,是由于安卓程序使用InputStream读取时不能和串...

clliu_hust的博客 8045

技术美术个人笔记(十六)——Houdini到UE的大地形

文章目录关于地形白模制作关于PDG流程 关于地形白模制作 用heightfield noise和笔刷刷出合适的mask做山形叠加: 用remap可快捷反转mask ,用来做平原地区的小型丘陵: 接着用clip切平最低处,用distort制造侵蚀等,对部分地区用笔刷进行微调拓宽峡谷: 用经过sweep打平的曲线以及裁切的各种多面体用heightfield_project投影制作河道和水池,用blur mask并remap的方法拓宽河道 用distort、erode制造合适的弯曲和侵蚀,同理可挖出月牙形

小谁的博客 3180

inputStream.read(byteArray) != -1 死循环问题

while ((len = inputStream.read(byteArray)) != -1){ message = new String(byteArray,0,len); System.out.println(len); } 类似于这种inputStream读取完数据之后,但是不跳出循环的问题,首先先看下你的inputStream是不是scoket通信的,如果是就将你的输入方的socket关闭就好 // 这是输入方 创建socket对象 Socket socket =..

qq_34756209的博客 2722

航天设备研制中的形态分类:电性件、正样件及其他关键形态详解

航天设备的研制是一个高度复杂且严谨的工程过程,涉及多个阶段的不同产品形态。这些形态各具特点,在研制流程中承担着不同的验证任务和工程目标。本文将系统介绍航天设备研制中的主要形态,包括**电性件(EM)**、**正样件(FM)**以及**结构热控件(STM)**、**鉴定件(QM)**和**初样件(PFM)**等,详细解析它们的定义、用途和工程意义,帮助读者全面理解航天产品从设计到飞行的全生命周期管理。

ScilogyHunter的博客 1662

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android 蓝牙 接收不完整,安卓蓝牙串口中InputStream数据接收不完整,已解决

问题描述先描述一下问题,烦了我一段时间。我是在单片机上使用HC05蓝牙模块和安卓手机进行通讯,从手机往单片机发送正常,从单片机往手机发数据总是不完整,一段字符被分成几段了,安卓的程序用的是谷歌官方的BluetoothChat例程。分析原因 分析了一下原因,谷歌官方的BluetoothChat读取线程的代码如上,是由于安卓程序使用InputStream读取时不能和串口一样设置一个结束符(串口的结束符...

weixin_36285392的博客 1420

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java网络下载 文件错误的一个可能原因

寒假开始无事在家的我想遍一个多线程下载程序,语言当然是Java,原因有二一是linux下的下载程序太恶心....找不到好的,自己想写一个用用..二是想多实践一些java的基础编程,主要是网络和多线程编程.. 假期花了一个星期的时间基本完成了代码,不过遇到一个极端郁闷的问题:下载小程序完全正确,但是下载2M以上的程序就会出现下载完毕后程序不能运行。开始怀疑是Input流的问题,不过一直得不到解决,后

solonote的专栏 4246

java eofexception_【疑难杂症04】EOFException异常详解

最近线上的系统被检测出有错误日志,领导让我检查下问题,我就顺便了解了下这个异常。了解一个类,当然是先去看他的API,EOFException的API如下:通过这个API,我们可以得出以下信息:这是一个IO异常的子类,名字也是END OF FILE的缩写,当然也表示流的末尾它在表明一个信息,流已经到末尾了,而大部分做法是以特殊值的形式返回给我们,而不是抛异常也就是说这个异常是被主动抛出来的,而不是底...

weixin_35926446的博客 1278

InputStream使用read()方法 时,判断尾标记许主意的问题

 先看下面一段代码: [java] view plaincopyprint? //同过判断文件的结尾来读取文件  import java.io.File;  import java.io.InputStream;  import java.io.FileInputStream;  public class InputStreamDemo02  {      pub

werewofe的专栏 1465

java 读取文件inputstream_使用Inputstream读取文件

在java中,可以使用InputStream对文件进行读取,就是字节流的输入。当读取文件内容进程序时,需要使用一个byte数组来进行存储,如此会有如下两个问题:1.如何建立合适大小的byte数组,如果已知输入流的大小。2.如果不知输入流的大小,则肯定需要建立一个很大的byte数组,那么byte中很可能有空的内容,那么如何正确合适的将byte数组的中的内容输出?先看第一个问题:解决之道就是获取输入流...

weixin_35802571的博客 1万+

inputStream读取文件

在java中,可以使用InputStream对文件进行读取,就是字节流的输入。当读取文件内容进程序时,需要使用一个byte数组来进行存储,如此会有如下两个问题: 1.如何建立合适大小的byte数组,如果已知输入流的大小。 2.如果不知输入流的大小,则肯定需要建立一个很大的byte数组,那么byte中很可能有空的内容,那么如何正确合适的将byte数组的中的内容输出? 先看第一个问题

蓝魔 749

字节输入流【InputStream】读取字节数据

java.io.InputStream:字节输入流 此抽象类是表示字节输入流的所有类的超类 定义了所有子类共性的方法: int read()从输入流中读取数据的下一个字节 in read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中 void close() 关闭此输入流并释放与该流关联的所有系统资源 java.io.FileInputStream extends InputStream FileInputStream:文件字节输入流 作用:把硬盘文

weixin_44664432的博客 4996

java InputStream为什么不能重复读取

首先,熟悉Java的人可能都知道,Java中的Inputstream是不能重复读取的。  但是有没有想过,InputStream为什么不能重复读呢?  其实要回答“为什么”这个问题很简单,就是人家接口就是这么设计的,不能重复读。  所以今天要讨论的问题更像是:Java的InputStream为什么要设计为不能重复读?  关于InputStream为什么不能重复读取,网上也各有说法:  有

xqk709008281的博客 2791
上一篇: 使用URLConnection下载文件或图片并保存到本地
下一篇: 如何面对困难的经典语录
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值