Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BufferedWriter可以';不要写某些字符_Java_Bufferedwriter - Fatal编程技术网

Java BufferedWriter可以';不要写某些字符

Java BufferedWriter可以';不要写某些字符,java,bufferedwriter,Java,Bufferedwriter,我决定测试我能写多少不同的字符。我尝试了以下代码: for (int i = 0;i < 255;i++) { myBufferedWriter.write(i); } 我认为你的问题在于你使用了错误的API。当前代码的情况是,您的“字符”被视为文本,并使用平台的默认字符编码进行编码 如果您希望以二进制形式写入数据(例如,从零到255的字节),则应使用OutputStreamAPI。特别是缓冲输出流 例如: public class Main { public stati

我决定测试我能写多少不同的字符。我尝试了以下代码:

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

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

如果您希望以二进制形式写入数据(例如,从零到255的字节),则应使用
OutputStream
API。特别是
缓冲输出流

例如:

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();
    }
}
公共类主{
公共静态void main(字符串[]args)引发IOException{
BufferedOutputStream bos=新的BufferedOutputStream(
新文件输出流(新文件(“abc.dat”));
对于(int i=0;i<255;i++){
bos.write(i);
}
bos.close();
}
}

如果您也希望能够编写其他数据类型(以二进制形式),那么
DataOutputStream
更合适。。。因为它有很多其他的方法来编写基元类型等等。但是,如果您想高效地编写,需要在
FileOutputStream
DataOutputStream
之间设置一个
bufferedoutstream
,我已经解决了这个问题。我的新代码:

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){}
    }
}
公共类主{
公共静态void main(字符串[]args){
试一试{
DataOutputStream dos=新的DataOutputStream(新文件outputstream(新文件(“abc.txt”));
对于(int i=0;i<255;i++)
dos.writeByte(i);
dos.close();
}捕获(例外e){}
}
}

如何使用输出流写入文件?@SusanYanders
OutputStream.write()
+对于这个答案,@jlordo它在任何编辑器中都会这样做。我试过另外两个。如果它显示了错误的东西,那么它就不会是一个十六进制编辑器。我看得不够近。我有和你一样的输出。我会做一些调查,然后发布一个答案。@jlordo是的。一大堆问号。:)没有必要把答案放在这个问题上。。。尤其是因为这不一定是最好的答案。我把它删掉了。。这段代码有两个问题:1)您没有进行任何缓冲,因此写入的每个字节都将执行一个系统调用。2) 你把所有的例外都压扁了,这是个坏主意。@StephenC我知道。现在这并不重要。在C++中,几乎不可能使用异常,如果没有任何可能引发异常的错误,那么只会不重要。如果存在bug,那么您的代码将自动删除任何证据。我不认为这是不重要的。。。除非你是少数真正喜欢追踪不明虫子的人之一。
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){}
    }
}