web-dev-qa-db-ja.com

バイナリデータをJavaのファイルに出力する方法

圧縮のためにバイナリ形式でファイルにデータを書き込もうとしています。データは完全に浮動小数点で構成されているので、データを0〜65535の整数に量子化して、データを2ビットの符号なし整数として書き込み、最終的にスペースを節約することにしました。ただし、その量子化されたデータを、人間が読めるAsciiではなくバイナリでファイルに出力する必要があります。

現時点ではこれが私がやっていることです

@param outputFile .txtファイル内の文字列として既に量子化されたデータを含むファイル

public void generateBinaryRioFile(String materialLibrary,
        String outputFile, String group, String mtlAux) {

    try {

        // Create file
        FileWriter fileStream = new FileWriter(outputFile);
        try {

            BufferedReader br = new BufferedReader(new FileReader(new File(
                    "idx.txt")));

            while ((line = br.readLine()) != null) {
                writer.write(line + "\n");
            }
            try {
                br.close();

            } catch (FileNotFoundException e) {
                e.getMessage();
            } catch (IOException e) {
                e.printStackTrace();
            }           BufferedWriter writer = new BufferedWriter(fileStream);

しかし、それは人間が読める文字列としてファイルに書き込みます。バイナリデータとして書き込む必要があります。 Javaでこれを行うにはどうすればよいですか?

18
Zeeno

多分このフラグメントが役立つでしょう。

 int i = 42;
 DataOutputStream os = new DataOutputStream(new FileOutputStream("C:\\binout.dat"));
 os.writeInt(i);
 os.close();
38
rajah9

DataOutputStream についてはどうでしょう。 2つのデータ整数を含むintを書き込むことができます。

DataOutputStream dos = new DataOutputStream(new FileOutputStream(<path>));
ArrayList<Integer> list = new ArrayList<Integer>();
int sum;
for( int i = 0; i < list.size(); i++ ) {
    if(i%2!=0){
        sum |= list.get( i ).intValue()<<16;
        dos.writeInt( sum );
    } else {
        sum = list.get( i ).intValue();
    }
}
2
oliholz