为什么我不能将二进制字符串与空格连接起来? (就像下面的例子)

Why can't I concatenate a binary string with a whitespace? (Like the following example)

1) 这是 class,我的问题出现在这里:

import java.io.FileReader;
import java.io.IOException;


public class ByteFileReader {
    private Converter c = new Converter();

    public void readFile() {

        try {
            FileReader f = new FileReader("C:\Users\Troy\Dropbox\DATAMATIKER\Programmering Eclipse\eclipse\Eclipse Workspace\2.Semester OS - Binær Streng Læser\src\dummyFile.txt");

            for ( int i=0; f.ready(); i++ ) {
                int character = f.read();
                System.out.print( c.toBinaryString( character ) + " " );
            }

            f.close();

        } catch ( IOException e ) {
            System.out.println("Some exception was handled!");
        }

    }

}

2) 具体来说,在这一行中:

System.out.print( c.toBinaryString( character ) + " " );

3) 现在,toBinaryString() 方法定义在以下 Converter class 中,它是 c 对象:

public class Converter {

    public String toBinaryString(int b) {
        return Integer.toBinaryString(b);
    }

    public String toHexadecimalString(int b) {
        return Integer.toHexString(b);
    }

}

4) 最后,我的 Main class 和 main 方法:

public class Main {

    public static void main(String[] args) {
        ByteFileReader b = new ByteFileReader();

        b.readFile();

    }
}

这就是我的所有代码。所以我认为现在应该可以在另一台 Eclipse 的另一台计算机上重现完全相同的情况。只需将 FileReader 的文件目录更改为您自己 pc 上的目录即可。希望大家帮忙!

(注意!奇怪的是,如果您在有问题的文本字符串中放置一个句点“.”、斜线“/”或其他一些符号,它将正常工作并将所有二进制字符串打印到控制台空格也应该如此。) 我的意思是这样的:

System.out.print(c.toBinaryString(character) + ".");

(编辑:上面的行给出了它应该的输出。这当然来自我的特定文件。关键是它需要输出二进制字符串,每个字符串之间有一个连接)

1001101.1101111.1110010.1100101.1100010.1100001.1110010.1101110.1100101.100000.1101111.1110010.100000

如下一行:

System.out.print(c.toBinaryString(character) + " ");

根本没有输出!

问题是控制台输出被缓冲了。之后:

System.out.println();

一切都写好了。所以有时这样做。

这不是您的代码的问题。您的代码工作正常。我们遇到了 Eclipse 控制台视图的问题。由于某种原因,它无法使用空格显示一长行。解决这个问题有两种方案:

  1. 在 eclipse 控制台中限制你的线宽

  2. 修改您的代码来执行此操作

    int length = 0;
    for (int i = 0; f.ready(); i++) {
        int character = f.read();
        String s = c.toBinaryString(character) + " ";
    
        length += s.length();
        if (length > 80) {
            s += "\n";
            length = 0;
        }
        System.out.print(s);
    }
    

如果你只需要它来打印它,你可以简单地将你的二进制文件连接成一个大字符串:

String strOut = "";
strOut = strOut + c.toBinaryString( character ) + " "; //concatenate as many times as you want
System.out.println(strOut);

希望对您有所帮助