将值为y的x字节写入java中的文件

时间:2011-05-03 09:01:00

标签: java io

我正在尝试写入一个文件,一定数量的字节可以说x字节,值为y。问题是我正在做很多时间,我目前正在使用带有BufferedOutputStream的DataOutputStream和获取字节数组的write方法。每次我分配一个长度为x的新字节数组并写入它。这很浪费,我想知道是否有更有效的方法? 感谢。

编辑:我已经通过分配一个按需求增长的大数组来实现它,但问题是我存储它并且可能会变得非常大。 代码:

 byte[] block = new byte[4096];
    try {
        for(int i=0; i<nameOccurence.length; ++i){
            if(nameOccurence[i] >= block.length){
                int size = ((Integer.MAX_VALUE - nameOccurence[i]) <= 0.5*Integer.MAX_VALUE) ? Integer.MAX_VALUE : (nameOccurence[i] * 2);
                block = new byte[size];
            }
            if(nameOccurence[i] == 0){
                namePointer[i] = -1;//i.e. there are no vertices with this name
                continue;
            }
            namePointer[i] = byteCounter;

            ds.writeInt(nameOccurence[i]);
            ds.write(block, 0, nameOccurence[i]*2);
            ds.write(block, 0, nameOccurence[i]*2);
            byteCounter += (4*((long)nameOccurence[i]))+4;//because we wrote an integer.
        }

其中ds是DataOutputStream。请注意,如果nameOccurence [i]足够大,则数组块可以增长到max int。

我认为最好的方法是在nameOccurence中查找所有i的最大数量并分配此长度的数组。问题是它可以获得Integer.MAX_VALUE。

也许用循环运行并且每次写1个字节会更好?请注意,DataOuputStream的底层是BufferedOutputStream。

2 个答案:

答案 0 :(得分:3)

使用

String strFileName = "C:/FileIO/BufferedOutputStreamDemo";
FileOutputStream fos = new FileOutputStream(strFileName);
fos.write(yourbytes);

答案 1 :(得分:1)

如果你不想每次都分配一个新的数组,那么分配一个绝对足够大的X数组,将它存储在你的类中的某个地方,然后,当你需要编写它时,用Y填充它,并且您可以在OutputStream.write(byte[] b, int off, int len)方法中指定要写入的数组中的字节数。此外,您不需要DataOutputStream来写字节,只需BufferedOutputStream即可。