使用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写二进制文件的主要步骤有的主要内容,如果未能解决你的问题,请参考以下文章