当前位置:首页 > 系统bug > 正文内容

如何处理EOFException

2019-06-20 | 分类:系统bug | 评论:0人 | 浏览:88次

如何处理EOFException?

You ordered 12 units of Java T-shirt at $19.99
You ordered 8 units of Java Mug at $9.99
You ordered 13 units of Duke Juggling Dolls at $15.99
You ordered 29 units of Java Pin at $3.99
You ordered 50 units of Java Key Chain at $4.99
java.io.EOFException
        at java.io.DataInputStream.readFully(Unknown Source)
        at java.io.DataInputStream.readLong(Unknown Source)
        at java.io.DataInputStream.readDouble(Unknown Source)
        at DataStreams.main(DataStreams.java:39)
Your total is 892.880000.


此代码返回EOFException,对添加内容或如何处理问题的任何建议?

public AbstractBlock readBlock(int blockNum, AbstractDBFile f)

        throws IOException {

    DBFile dbf = (DBFile) f;

    byte[] data2 = new byte[4096];

    RandomAccessFile file = new RandomAccessFile(dbf.fileName, "r");

    file.seek(4096+blockNum*4096);

    Block b = new Block();

    for (int i = 0; i < 4096; i++){

        data2[i] = file.readByte();

    }

    file.close();

    b.setData(data2);

    return b;

}

 

image

 

尽管它超出了这个问题的范围,但是逐字节迭代文件是非常低效的。你应该用byte[] buffer = new byte[4096]; int count = file.read(buffer, 0, buffer.length);。 -  sturcotte06 2016年 3月19日2:18

你能分享你的异常堆栈跟踪来找到你获得异常的位置吗?它在file.seek中吗? -  The Roy Mar 19 ’16 at 2:19

目前尚不清楚您的问题是如何处理异常,或者为什么异常发生。 -  Dave Costa 2016年3月19日3:15

可能重复的EOFException – 如何处理? –

 

 

您可以尝试这样做:

public AbstractBlock readBlock(int blockNum, AbstractDBFile f)
    throws IOException {

    DBFile dbf = (DBFile) f;
    byte[] data2 = new byte[4096];
    RandomAccessFile file = new RandomAccessFile(dbf.fileName, "r");
    file.seek(4096+blockNum*4096);
    Block b = new Block();

    for (int i = 0; i < 4096; i++){
        try{  
            data2[i] = file.readByte();
        }catch(EOFException ex){
            System.out.println("End of file reached!");

            //break the loop
            break;
         }
    }
    file.close();
    b.setData(data2);
    return b;
}

该功能readByte可以抛出IOExceptionEOFException异常

public final byte readByte()抛出IOException

抛出:

EOFException – 如果此文件已到达结尾。

IOException – 如果发生I / O错误。

blockNum==1…这是否意味着您应该阅读文件中的第一个块?如果是这样,你希望传递0file.seek(),但实际上你传递4096 + 4096 * 1 = 8192.这意味着对于给定的blockNum,你实际上是在读取它之后的第二个块。

如果是这样,那么对于n块的文件,如果你传递n或者n-1这个功能,你会得到一个EOFException类。

 

如果第一个块编号为0而不是1,那么您只关闭了一个块,但基本问题仍然是相同的。

如果你的意思是“当我抓住它时我该怎么办?”,你应该停止阅读和休息。如果你的意思是’为什么我得到它?’,你的块编号应该从零开始,假设你对块的数量是正确的。

来源:赵大虾博客(微信号/QQ号:),转载请注明出处,谢谢!

  • 评论:(0)

已有 0 位网友发表了一针见血的评论,你还等什么?

◎欢迎参与讨论!

傲笑九天志在必得, 卧薪尝胆勇者无畏

站内搜索

傲笑九天志在必得, 卧薪尝胆勇者无畏

傲笑九天志在必得, 卧薪尝胆勇者无畏