繁体   English   中英

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

[英]Write x bytes with value y to a file in java

我正在尝试向文件写入一定数量的字节,比如说 x 字节,值为 y。 问题是我做了很多时间,我目前正在使用 DataOutputStream 和 BufferedOutputStream 以及获取字节数组的 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 是数据输出流。 请注意,如果 nameOccurence[i] 足够大,则数组块可以增长到最大 int。

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

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

利用

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM