我决定测试一下我能写多少个不同的角色。我试过这段代码:
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){}
}
}
答案 0 :(得分:4)
我认为您的问题是您使用的是错误的API。当前代码发生的情况是,您的“字符”被视为文本,并使用您平台的默认字符编码进行编码。
如果要以二进制形式写入数据(例如,字节0到255),那么您应该使用OutputStream
API。具体来说是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
。
答案 1 :(得分: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){}
}
}