socket通讯如何判断读流成功? 如何判断读到正确的数据及完整的数据? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你读取数据不是用流吗?那直接用read方法不行吗可以确定是否读完,至于是否正确就不大清楚了 read方法返回大于零就表示读取成功啊,当小于零时就表示流已经结束了如果出现错误则会抛出IOException的 InputStream is = **** //获取输入流int readSize = 0;byte[] buff = new byte[1024];while(true) { readSize = is.read(buff); if(readSize > -1) { System.out.println("读取到输入内容:"); for(byte b : buff) System.out.print(b + " "); System.out.println(""); } else { System.out.println("读取输入流结束,或者此输入流产生错误无法读取"); }} IO流涉及到二进制信息的传输问题。一般来讲,数据传输,都会有相应的协议。网络传输,一般都用TCP协议。UDP协议的,也有用的。对Java而言,UDP比较容易判断,是否有数据读入。楼主看一下API就明白了。至于TCP协议来传输数据,一般在此基础上,还要封装一层应用层的协议,包头部分应注明该信息包的长度。这样,在读取数据的时候,就有了依照。如果没有相应的封装协议,楼主可以尝试使用read方法,先读取一个字节,如果返回的是-1 ,则说明已经是InputStream的结尾了,但,该方法是阻塞读的。如果返回的不是-1 ,要注意,之后读取的数据要从byte[]的第1个位置开始读取,将刚才读取的int型数据转换成byte型数据,添加到byte[]的第0个位置。如果阻塞读对应用带来不便,楼主可以配合available方法,进行读取程序的设计。 正常的应用时双方有数据MAC校验最好. 大侠,200分求教用java打印表格的问题? 求 Java内嵌flash源码 或者 单个flash播放器的源码 急急急~~~ 关于 HttpServletRequest 接口的 getPathInfo() 方法 有几个比较急的问题,一并问一下! 修改一个错误 哪儿有支持多列的listview?(内详) 如何加入新的Api类库(求助) 一个关于tag的使用问题(救急) 关于SESSION的问题?? 看过《THINK IN JAVA》 的朋友请进来 网络编程的问题,。。。郁闷中。。。。。 JAVA试题
那直接用read方法不行吗
可以确定是否读完,至于是否正确
就不大清楚了
int readSize = 0;
byte[] buff = new byte[1024];while(true) {
readSize = is.read(buff);
if(readSize > -1) {
System.out.println("读取到输入内容:");
for(byte b : buff)
System.out.print(b + " ");
System.out.println("");
} else {
System.out.println("读取输入流结束,或者此输入流产生错误无法读取");
}
}
一般来讲,数据传输,都会有相应的协议。
网络传输,一般都用TCP协议。UDP协议的,也有用的。
对Java而言,UDP比较容易判断,是否有数据读入。楼主看一下API就明白了。
至于TCP协议来传输数据,一般在此基础上,还要封装一层应用层的协议,包头部分应注明该信息包的长度。这样,在读取数据的时候,就有了依照。
如果没有相应的封装协议,楼主可以尝试使用read方法,先读取一个字节,如果返回的是-1 ,则说明已经是InputStream的结尾了,但,该方法是阻塞读的。如果返回的不是-1 ,要注意,之后读取的数据要从byte[]的第1个位置开始读取,将刚才读取的int型数据转换成byte型数据,添加到byte[]的第0个位置。
如果阻塞读对应用带来不便,楼主可以配合available方法,进行读取程序的设计。