使用DataOutputStream将int写入文件

时间:2014-09-27 07:44:15

标签: java dataoutputstream

我生成随机整数并尝试将它们写入文件。问题是当我打开我创建的文件时,我找不到我的整数但是像正方形等一组符号......这是编码问题吗?

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class GenerateBigList {

    public static void main(String[] args) {
        //generate in memory big list of numbers in  [0, 100]
        List list = new ArrayList<Integer>(1000);
        for (int i = 0; i < 1000; i++) {
            Double randDouble = Math.random() * 100;
            int randInt = randDouble.intValue();
            list.add(randInt);
        }

        //write it down to disk
        File file = new File("tmpFileSort.txt");
        try {

            FileOutputStream fos = new FileOutputStream("C:/tmp/tmpFileSort.txt");
            DataOutputStream dos = new DataOutputStream(fos);
            writeListInteger(list, dos);
            dos.close();    

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void writeListInteger(List<Integer> list, DataOutputStream dos) throws IOException {
        for (Integer elt : list) {
            dos.writeInt(elt);
        }
    }

}

来自创建文件的部分复制粘贴:

/   O   a   C   ?       6   N       

3 个答案:

答案 0 :(得分:2)

来自doc

 public final void writeInt(int v) throws IOException
    Writes an int to the underlying output stream as four bytes, high byte first. If no exception is thrown, the counter written is incremented by 4.

没有编码问题。这是您使用文本编辑器打开二进制文件时看到的内容。尝试使用十六进制编辑器打开。

答案 1 :(得分:0)

那些“符号”就是你的符号。如果您在文本编辑器中打开它们,那就是二进制文件的样子。请注意,该文件的大小正好为4000字节,并且您写入了1000个整数,每个字节为4个字节。

如果您使用DataInputStream读取文件,您将获得原始值:

try (DataInputStream dis = new DataInputStream(
    new BufferedInputStream(new FileInputStream("C:/tmp/tmpFileSort.txt")))) {
    for (int i = 0; i < 1000; i++) {
        System.out.println(dis.readInt());
    }
} catch (IOException e) {
    throw new RuntimeException(e);
}

答案 2 :(得分:0)

它写二进制文件,而不是文本。你的期望是错误的。如果你想要文字,请使用Writer。