GZIPInputStream报EOFException(异常的getmessage是null)

本文探讨了在日志清洗过程中遇到的EOFException错误,详细分析了错误原因,特别是当处理空文件时GZIPInputStream引发异常的情况,并提出了代码优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

有个前人留下的日志清洗的程序,日志源是gz包的格式,后台拿到gz后进行解压并清洗日志,报错代码如下:

//代码里的file对象即为日之源的gz文件
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(file)),decoder))

我将这行代码拆开,分别打断点发现报错出在GZIPInputStream这里。

报错

 存在的问题

1、EOFException是什么错误?

2、为什么EOFException的内容是null?

3、为什么会报EOFException?

解决

1、EOFException是什么错误?

当输入过程中意外到达文件或流的末尾时,抛出此异常

2、为什么EOFException的内容是null?

代码里try catch后,会将异常getmessage的内容写入error日志里,但是现在看error日志发现是个null。

下图是EOFException的api内容

 3、为什么会报EOFException?

报错得根本原因:存在一个空文件,那么为什么空文件会报EOFException呢,如下:

(1)输入流的read方法读取到文件末尾时,就会返回-1。

(2) 下图是GZIPInputStream的一段源码,也是报错的原因

因为是空文件,这个文件传入到这个方法里(即下图中的InputStream in):如(1)中描述,因为是空文件,所以读取第一个字节时直接到达文件末尾了,即返回-1;如果b=-1,则会抛出EOFException。

教训

这个代码问题太大了,在处理文件前都没有进行判空,即这个文件是不是个空文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值