【问题标题】:Can't read Data input Stream in java IO无法在 java IO 中读取数据输入流
【发布时间】:2014-12-13 17:10:19
【问题描述】:

大家好,我正在练习 java 数据输入输出流。但我不知道如何解决这个问题我可以将数据输入流写入我的文件但无法读取它

这是我的代码:

public static void readDataIOStream(){
            DataInputStream dataIn = null;

            int i = 10;
            double d = 1023.56;
            boolean b = true;

            try {
                dataIn = new DataInputStream(
                        new FileInputStream("test.txt"));

                i = dataIn.readInt();
                System.out.println("Reading " + i);
                d = dataIn.readDouble();
                System.out.println("Reading " + d);
                b = dataIn.readBoolean();
                System.out.println("Reading " + b);
                d = dataIn.readDouble();
                System.out.println("Reading " + d);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }try {
                dataIn.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        public static void writeDataIOStream(){
            DataOutputStream dataOut = null;

            int i = 10;
            double d = 1023.56;
            boolean b = true;

            try {
                dataOut = new DataOutputStream(new FileOutputStream("test.txt"));
                System.out.println("Writing " + i);
                dataOut.write(i);
                System.out.println("Writing " + d);
                dataOut.writeDouble(d);
                System.out.println("Writing " + b);
                dataOut.writeBoolean(b);
                System.out.println("Writing " + 12.2 * 7.4);
                dataOut.writeDouble(12.2 * 7.4);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                try {
                    dataOut.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

这是错误:

 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 bytestream.DataIOStream.readDataIOStream(DataIOStream.java:108)
    at bytestream.DataIOStream.main(DataIOStream.java:16)
Writing 10
Writing 1023.56
Writing true
Writing 90.28
Reading 172003324
Reading 8.029891292620447E283
Reading true

请帮助我为什么我无法读取数据输入流

【问题讨论】:

    标签: java io file-handling


    【解决方案1】:

    dataOut.write(i) 只写入一个字节。然而,您正在阅读一个 inti = dataIn.readInt() 这是 4 个字节。

    因此,当尝试读取最后一个元素 double 时,流中只有 5 个字节,而它尝试读取 8 个字节(double 的长度),因此出现异常。

    由于您要写入/读取int,您需要调用dataOut.writeInt(i) 而不是dataOut.write(i)

    【讨论】:

    • 你不见了,而不是dataOut.write(i);
    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2012-03-12
    相关资源
    最近更新 更多