使用dataoutputstream写二进制文件的主要步骤有

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用dataoutputstream写二进制文件的主要步骤有相关的知识,希望对你有一定的参考价值。

参考技术A 1、判断目录是否存在,不存在就创建。
2、构造InputStream和OutputStream的对象。
3、构造完对象后接着构造DataInputStream和DataOutputStream对象,构造过程中需要使用构造方法传入InputStream及OutputStream的对象。
4、构造字节数组用于存放读入的数据,长度我直接定义为文件大小的长度,因为byte数组的容量非常巨大,是以2的指数次幂大小的长度,普通文件完全够用。
5、使用DataInputstream和DataOutputStream的read()和write()方法,读入和写入数据。

使用DataOutputStream写入int类型数字不能显示

  前段时间做Android系统项目需要使用DataOutputStream数据流向文件里写入数据,写入的有String类型和int类型。写入之后在代码中使用DataInputStream读出是没有问题的,处于好奇心就把生成的文件导出来查看了一下。

  打开之后发现,生成的文件里有一堆乱码,除了一些String类型的数据,其他都是乱码。当时第一反应应该是编码格式的问题,应为DataOutputStream里有writeUTF之类的方法,相当于指定的编码格式,于是我就把打开格式切换成各种编码格式,utf8、ansi、gbk等等都尝试了,都不行,这是怎么回事??

  尝试过各种编码没有结果之后,我就从源码入手。由于问题都是出在int类型的数据上,于是就直接查看writeInt的方法。这一看才发现,原来int类型的数据是从内存中直接将二进制格式的文件写入文件了。回头再去用UE使用十六进制查看的方式查看生成的那个文件,真相大白。

 

    /**
     * Writes an <code>int</code> to the underlying output stream as four
     * bytes, high byte first. If no exception is thrown, the counter
     * <code>written</code> is incremented by <code>4</code>.
     *
     * @param      v   an <code>int</code> to be written.
     * @exception  IOException  if an I/O error occurs.
     * @see        java.io.FilterOutputStream#out
     */
    public final void writeInt(int v) throws IOException {
        out.write((v >>> 24) & 0xFF);
        out.write((v >>> 16) & 0xFF);
        out.write((v >>>  8) & 0xFF);
        out.write((v >>>  0) & 0xFF);
        incCount(4);
    }

以上是关于使用dataoutputstream写二进制文件的主要步骤有的主要内容,如果未能解决你的问题,请参考以下文章

File I/O

JAVA DataOutputStream

Java中使用字节流类读取二进制文件

Java DataOutputStream类

JavaI/O:简单的使用DataOutputStream和DataInputStream操作文件流

PrintWriter 和 Scanner 类的组合使用