【问题标题】:Why does the output read "null" when I am trying to do Java Binary I/O?当我尝试执行 Java 二进制 I/O 时,为什么输出显示为“null”?
【发布时间】:2021-08-12 04:56:23
【问题描述】:

我正在学习如何执行 Java 二进制输入/输出。所以在开始我的全部任务之前,我只是想确保我知道如何执行基本的 I/O。我可以进行文本 I/O,但我一直遇到二进制 I/O 问题。我的代码只是将一些内容写入二进制文件。然后更多的代码只是读取二进制文件并打印它的数据。

这是将数据写入二进制文件的代码。不必担心写入文件的确切内容。我只是随意放东西。

import java.io.*;

public class Write
{
    public static void main(String[] args)
    {
        DataOutputStream writer = null;
                              
        try
        {
            writer = new DataOutputStream(
                     new BufferedOutputStream(
                     new FileOutputStream("writer.dat")));
                 
            writer.writeInt(8);
            writer.writeChars("Monkey       ");
            writer.writeChars("Bottled Water");
            writer.writeChars("Truth        ");
            writer.writeDouble(29.99);
        
            writer.close();
        }
    
        catch (Exception e)
        {
            System.out.println("Error");
        }
    }
}

这是从二进制文件中读取数据的代码。

import java.io.*;

public class Read
{
    public static void main(String[] args)
    {
        DataInputStream reader = null;
        int integ = 0;
        String [] names = new String[3];
        double win = 0;
    
        try
        {
            reader = new DataInputStream(
                     new BufferedInputStream(
                     new FileInputStream("writer.dat")));
                  
            integ = reader.readInt();
        
            for ( int i = 0 ; i < 3 ; i++ )
            {
                for ( int j = 0 ; j < 13 ; j++ )
                {
                    names[i] += reader.readChar();
                }
            }
        
            win = reader.readDouble();
        
            reader.close();
        }
    
        catch (Exception e)
        {
            System.out.println("Error");
        }
    
        System.out.println(integ);
    
        for ( int e = 0 ; e < 3 ; e++)
        {
            System.out.println(names[e]);
        }
    
        System.out.println(win);
    }
}

This is the output I get

有人可以解释为什么它在单词前面显示 null 吗?

【问题讨论】:

    标签: java java-io


    【解决方案1】:

    您应该替换 names 数组声明:

    String [] names = new String[3];
    

    String [] names = {"","",""};
    

    String [] names = new String[3];
    names[0] = "";
    names[1] = "";
    names[2] = "";
    

    你在单词的开头有null,因为数组names的各个值是null(你没有初始化它们)。

    所以在你的循环中当i=0, j=0 时,指令names[i] += reader.readChar(); 将相当于:

    names[0] += reader.readChar();
    

    相当于:

    names[0] = names[0] + reader.readChar();
    

    但是因为names数组值没有初始化,所以names[0]等于null。

    所以前面的表达式是等价的:

    names[0] = null + reader.readChar();
    

    所以names[0] 在循环的第一次迭代中现在等于nullM,最后将是nullMonkey

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-29
      • 2021-04-26
      • 2015-01-17
      • 1970-01-01
      • 2019-07-07
      • 2012-12-10
      • 2014-02-08
      • 1970-01-01
      相关资源
      最近更新 更多