Java软件低级错误(十 八):忽略InputStream.skip()返回值的处理

本文详细解析了Java中InputStream类的skip(long n)方法的功能与使用方式,并通过具体案例展示了如何正确应用该方法来跳过指定数量的字节。
 

解读:
java.io.InputStream.skip(long n):跳过和放弃此输入流中的 n 个数据字节,返回的是跳过的实际字节数。如果skip方法的返回值小于要跳过得字节数,则说明有异常发生,此时需要对异常情况进行处理。

¨案例:

 

fileInputStream = new FileInputStream(file);
fileInputStream.skip(receiveFileSize);//丢弃receiveFileSize个字节的数据
oldreceiveFileSize = receiveFileSize;
out = response.getOutputStream;

需要比较skip的返回值和输入参数,如果两者不相等时,需做特殊处理。

 

两者不相等的情况可能的原因有:

1)在跳过 n 个字节之前已到达文件的末尾;

2)输入参数为负;

 

当 `InputStream.reset()` 或 `skip()` 方法出现 `java.net.SocketTimeoutException: Read timed out` 错误,意味着在规定时间内没有从输入流中读取到数据,以下是一些可能的解决办法: ### 调整超时时间 增加 `Socket` 的超时时间,给予更多时间来完成读取操作。可以通过 `Socket.setSoTimeout(int timeout)` 方法设置超时时间。 ```java import java.net.Socket; import java.io.InputStream; public class SocketTimeoutExample { public static void main(String[] args) { try { Socket socket = new Socket("example.com", 80); // 设置超时时间为 5 秒 socket.setSoTimeout(5000); InputStream inputStream = socket.getInputStream(); // 进行 reset 或 skip 操作 // inputStream.reset(); // inputStream.skip(10); } catch (Exception e) { e.printStackTrace(); } } } ``` ### 检查网络连接 确保网络连接稳定,可能是网络波动、服务器负载过高等原因导致数据传输延迟。可以尝试重新连接网络,或者联系网络管理员排查网络问题。 ### 检查服务器状态 检查服务器是否正常运行,是否有足够的资源处理请求。可以尝试访问其他服务器资源,或者联系服务器管理员检查服务器状态。 ### 优化代码逻辑 确保在调用 `reset()` 或 `skip()` 方法之前,输入流已经准备好。可以通过 `available()` 方法检查输入流中是否有可用数据。 ```java import java.io.InputStream; import java.net.Socket; public class InputStreamExample { public static void main(String[] args) { try { Socket socket = new Socket("example.com", 80); InputStream inputStream = socket.getInputStream(); if (inputStream.available() > 0) { // 进行 reset 或 skip 操作 // inputStream.reset(); // inputStream.skip(10); } } catch (Exception e) { e.printStackTrace(); } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值