java.io.EOFException

告别K值困扰:深入解析DBSCAN密度聚类算法的原理与实践 本文深入解析DBSCAN密度聚类算法的原理与实践,帮助读者告别K值困扰。DBSCAN无需预先指定聚类数量,能自动发现任意形状的簇,适用于电商用户分群、城市热点分析等场景。文章详细介绍了核心机制、参数调优、高维数据处理及性能优化技巧,并提供了实战代码示例。 阅读详情

问题描述

笔者在Socket文件上传中,在文件写出完成之后,发现服务端抛出如下异常

java.io.EOFException
	at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:340)
	at java.io.DataInputStream.readUTF(DataInputStream.java:589)
	at java.io.DataInputStream.readUTF(DataInputStream.java:564)
	at ServerTest$Client.run(ServerTest.java:49)
	at java.lang.Thread.run(Thread.java:744)

发现文件能正常上传,但是在文件上传完成后,抛出异常。

实验

笔者又进行了另外一个实验,在服务端用通过循环读取客户端的信息,客户端发送数据。

//服务端
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTest{
	public static void main(String[] args)  {
		new Thread(new Server()).start();;
	}

	private static class Server implements Runnable{
		private ServerSocket ss = null;
		@Override
		public void run() {
			try {
				ss = new ServerSocket(6677);
				while(!Thread.currentThread().isInterrupted()){
					Socket s = ss.accept();
					Thread t = new Thread(new Client(s));
					t.setDaemon(true);
					t.start();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private static class Client implements Runnable{
		private Socket s = null;
		private DataInputStream dis = null;
		private DataOutputStream dos = null;

		public Client(Socket s){
			this.s = s;
			try {
				this.dis = new DataInputStream(s.getInputStream());
				this.dos = new DataOutputStream(s.getOutputStream());
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		@Override
		public void run() {				
			try {
				while(!Thread.currentThread().isInterrupted()){
					String str = dis.readUTF();
					System.out.println(str);
				}
			} catch (IOException e) {
				e.printStackTrace();
			}finally{
				try {
					if(dos!=null)dos.close();
					if(dis!=null)dis.close();
					if(s!=null)s.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

//客户端
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class Test {
	public static void main(String[] args) {
		Socket s = null;
		DataOutputStream dos = null;
		try {
			s = new Socket("127.0.0.1",6677);
			dos = new DataOutputStream(s.getOutputStream());
			dos.writeUTF("hello");
			dos.flush();
			BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
			bos.close();
/*			try {
				Thread.sleep(10000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}*/
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				if(dos!= null){
					dos.close();
				}
				if(s != null){
					s.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

发现依然出现问题描述中的异常。

解决方案

客户端在发送完文件后不可直接调用流的close(),无论是DataOoutputStream还是ObjectOutputStream亦或是BufferedOutputStream,还是InputStream都不可直接调用close()方法,当Socket.InputStream亦或是Socket.OutputStream调用close()方法都会使得Socket失效,从而服务端抛出异常。
另一方面在套接的其他流调用了close()方法中会调用Socket的流的close()方法。

所以当使用完输入和输出流后不应该及时关闭,可在客户端关闭时或需要在Socket需要关闭的时候进行流关闭。

复用浏览器之跳过扫码登录 复用浏览器 1、通过命令启动浏览器:chrome --remote-debugging-port=9222(前提是退出所有的chrome浏览器) 2、启动浏览器之后,在地址栏输入127.0.01:9222,成功复用如下图所示: 阅读详情

相关推荐

若依ruoyi框架实现单点登录或者接入统一认证

log.info("单点登录用户[{}]不存在, 需要创建.", loginName);log.info("单点登录用户[{}]已存在.", loginName);jsonObjectData.put("nickName","单点1");if (code.equals("0")) {//验证成功需要自动登录。jsonObject.put("msg","验证成功");ajax.put("msg", "登录成功");

GitHub质检员 2万+

已解决java.io.EOFException异常的正确解决方法,亲测有效!!!

通常表示程序尝试读取超出数据源末尾的内容。处理好输入流的末尾情况,以及网络连接的突然中断,是避免此异常的关键。务必确保在读取操作时进行适当的异常处理,并在捕获时清理资源和连接。通过这样的实践,开发者能够编写更健壮和稳定的应用程序。以上是此问题报错原因的解决方法,欢迎评论区留言讨论是否能解决,如果本文对你有帮助 欢迎关注、评论, 博主才有动力持续记录遇到的问题!!!博主v:XiaoMing_Java嗨,大家好,我是。

小明的Java问道之路 2万+

Multisim实现555计时器模拟简易电子琴

一. 元器件介绍 这里用到的元器件有: DIgital power(VCC)数字电源 频率计数器(XFC) 示波器(XSC) ground 数字地 Capacitan 电容器 Resistor 电阻器 555_VIRTUAL 555计时器 触发按键(DIPSW)(DPST)(SPST)

是你呀星途的博客 2万+

java.io.EOFException异常处理

在读取文件中对象时遇到java.io.EOFException异常 import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.util.ArrayList; public class ReadFromFile { public static ArrayList<Student> rea.

manshiai的博客 1万+

使用MATLAB中的Simulink工具来构建一个微电网系统的仿真平台

微电网是指由分布式电源(如太阳能、风能等)、储能装置、负载以及控制和保护装置组成的局部电力系统。它可以独立于主电网运行,也可以与主电网并联运行。本示例将以一个简单的微电网为例,展示如何利用Simulink进行微电网接入与孤岛运行策略的设计与仿真。分布式电源:模拟太阳能光伏板或风力发电机等分布式电源。储能装置:用于存储多余能量或补充不足能量。负载:模拟实际用电需求。双向变流器:实现直流与交流之间的转换,并支持并网和孤岛模式切换。控制器:负责管理微电网的运行模式,包括并网控制和孤岛控制。

xiaoheshang_123的博客 348

【以太网硬件九】1000base-X是什么?

简要描述1000base-X物理层规范

highman110的博客 1万+

javaIO异常之EOFException

文章目录错误描述解决方法 错误描述 今天在用对象流反序列化文件时遇到一个特别无语的错误,EOFException,表示流异常到底文件末尾。 刚开始我一直觉得这个异常是程序错误导致的,后面才发现这个其实是正常的, 就像是字节流读到文件末尾返回-1一样,对象流不是返回值,而是直接抛出异常, 所以说这个异常并不是程序错误导致的,而是表示正常读到了文件末尾。 解决方法 解决方法也很简单, 直接catch 而不给打印出来就行了。 ...

LLLlucky_boy的博客 9488

数据分析必问:Pandas面试题及参考答案

DataFrame是Pandas库中的一个核心数据结构,它类似于Excel中的表格,可以存储不同类型的数据。在Pandas中,抽样操作通常很简单,但是需要根据数据的特点和分析的需求来选择合适的抽样方法。数据标准化和归一化是数据预处理中常用的技术,目的是将数据调整到一个合适的范围内,以消除不同特征量纲和数值范围的差异,从而保证模型训练的有效性。CSV文件是一种文本文件,其中的数据以逗号分隔。不平衡数据集指的是数据集中各类别样本的数量差异较大的情况,这可能导致模型训练出现偏差,影响模型的泛化能力。

大模型大数据攻城狮的专栏 3009

解决java.io.EOFException 异常

在项目电子商城中遇到了一个java.io.EOFException 异常。 (这个异常只是在这个项目中遇到了,这是我的解决方法,不代表遇到这个异常的所有情况都适用这个方法。) public void FrmFile(){ File myfile = new File("User.txt"); try{ FileInPutStream fis =...

weixin_30512785的博客 3513

AI测试入门:如何测试AI对话模型/智能体?「详细介绍」

作为测试人员,我们需要掌握特定的技能和方法来有效地测试这些复杂的AI对话模型和智能体。传统的软件测试方法在这里可能不再完全适用,我们需要开发新的测试策略和技术来应对AI系统的独特特性。在这篇文章中,我们将深入探讨如何测试AI对话模型和智能体。

blues_C的博客 6860

【AI智能体】最强AI编程利器 Claude Code 从部署到项目实战详解

最强AI编程利器 Claude Code 从部署到项目实战详解

congge 4511

activemq java.io.eofexception,ActiveMQ启动时,警告为java.io.EOFException

am trying to start the ActiveMQ 5.11 and I see a WARNING as below:WARN | Transport Connection to: tcp://127.0.0.1:40890 failed: java.io.EOFExceptionMy activemq.xml is as below:keyStore="file:${JMS_KEY...

weixin_29170089的博客 2611

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ObjectInputStream java.io.EOFException解决

Exception in thread "main" java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2681) at java.io.ObjectInputStream$BlockDataInputStream.readShort(Objec...

BarryLee的博客 4489

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

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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【JAVA】readUTF()使用报 java.io.EOFException异常

package IO流; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.I...

Extends的博客 1986

java.io.EOFException错误

TOmcat启动后报:IOException while loading persisted sessions: java.io.EOFException错误 - IOException while loading persisted sessions: java.io.EOFException java.io.EOFException     at java.io.ObjectInpu

一位以IT为业余生活的穷人 2万+

Java练习:java.io.EOFException

今天学习Java下 IO的序列化流,报了EOFException异常。网上找了好多办法,我这个可能是错的最low的了????。 先上个错误图 Date a=new Date(); ObjectOutputStream obo=new ObjectOutputStream( new FileOutputStream("src\\猜数游戏\\jilu.txt")); obo.writeObject(a); obo.close(); ObjectInputStream ois=n

GDM的博客 640

RandomAccessFile readUTF() java.io.EOFException

RandomAccessFile 类实例 使用 readUTF() 方法 时,产生 java.io.EOFException 异常: readUTF() 只能读取由 writeUTF() 所写的文本 若定标至文件头读取,则必须保证所有文本均由 writeUTF() 所写 若遇到非由 writeUTF() 所写的内容,则会产生 java.io.EOFException 异常 代码: //注意!readUTF只能读取由writeUTF所写的文本! //若定标至文件头读取,则必须保证所有文本均由writeUT

weixin_45686201的博客 581

android java.io.eofexception_android studio启动失败,导致java.io.EOFException错误

更新android studio后,启动失败,这些popbox,如果有人知道如何解决这个问题,我真的很感激。android studio启动失败,导致java.io.EOFException错误Internal Error. Please report to https://code.google.com/p/android/issuesjava.lang.AssertionError: Inte...

weixin_28677451的博客 1434

hadoop读取文件java.io.EOFException解决

今天调试hadoop读取文件系统的时候遇到了一个java.io.EOFException异常 原始代码 String path="hdfs://master:9000/user/hadoop-0.20.2/tmp/7-0-initial-docid"; FileSystem fs = FileSystem.get(URI.create(path), context.getConfigur

随心所欲 5485

Java Scoket之java.io.EOFException解决方案

Java Scoket之java.io.EOFException解决方案 Socket接收数据的时候,常常会抛出java.io.EOFException异常,也没有明确的原因和提示,在网上搜搜,很多人都在问此问题,但是没有找到切实可行的办法。经过研究,问题解决了。 看到的异常堆栈信息如下: java.io.EOFExcep...

WGH100817的博客 863

eofexception怎么解决 java_Java Scoket之java.io.EOFException解决方案

Java Scoket之java.io.EOFException解决方案 Socket接收数据的时候,常常会抛出java.io.EOFException异常,也没有明确的原因和提示,在网上搜搜,很多人都在问此问题,但是没有找到切实可行的办法。经过研究,问题解决了。 看到的异常堆栈信息如下: java.io.EOFException at java.io.DataInputStream.r...

weixin_31101725的博客 3223

java.io.EOFException的解决方案

基于socket通信,android客户端关闭后再次打开,服务端报出java.io.EOFException java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) at java.io.ObjectInputStream$BlockDataInputStream.

tricoffee 2318
上一篇: 设计模式-观察者模式
下一篇: 设计模式-抽象工厂模式
丶丶路遥
博客等级 码龄12年 127粉丝 202原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值