4

我决定测试一下我能写多少个不同的字符。我试过这段代码:

for (int i = 0;i < 255;i++) {
    myBufferedWriter.write(i);
}

但是在文件中,使用我的十六进制编辑器,我看到它一开始计数正常01, 02, 03...,但后来到了3F,并写了大约 20 次,然后继续正常写。我不能写某些字符吗?我希望能够写出 0-255 的所有字符。

完整代码:

public class Main {
    public static void main(String[] args) {
        try{
            BufferedWriter bw = new BufferedWriter(new FileWriter(new File("abc.txt")));
            for (int i = 0;i < 255;i++) {
                bw.write(i);
            }
            bw.close();
          }catch(Exception e){}
    }
}
4

2 回答 2

4

我认为您的问题是您使用了错误的 API。您当前的代码发生的情况是您的“字符”被视为文本并使用您平台的默认字符编码进行编码。

如果您想以二进制形式写入数据(例如字节 0 到 255),那么您应该使用OutputStreamAPI。具体来说BufferedOutputStream

例如:

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream(new File("abc.dat")));
        for (int i = 0; i < 255; i++) {
            bos.write(i);
        }
        bos.close();
    }
}

如果您也希望能够编写其他数据类型(以二进制形式),那么DataOutputStream更合适......因为它有许多其他用于编写原始类型等的方法。但是,如果您想高效地编写代码,则需要BufferedOutputStream介于FileOutputStream和之间DataOutputStream

于 2013-07-04T23:28:44.990 回答
0

我想到了。我的新代码:

public class Main {
    public static void main(String[] args) {
        try{
            DataOutputStream dos = new DataOutputStream(new FileOutputStream(new File("abc.txt")));
            for (int i = 0;i < 255;i++)
                dos.writeByte(i);
            dos.close();
        }catch(Exception e){}
    }
}
于 2013-07-04T23:51:27.033 回答