Java基本数据类型的输入输出
 
Java基本数据类型输入输出不常用,但在一些加密解密方面,二进制文件的解析读写方面还是大有用武之地。比如,为了保护软件的版权,需要一个通过一定算法生成一个licenses文件,然以在软件运行的时候读取licenses文件,看是否授权成功。这个时候,可以用
java.io.DataInputStream、java.io.DataOutputStream
这两个类完成二进制licenses的生成和解析。
 
DataInputStream 数据输入流允许应用程序以与机器无关方式从基础输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
 
DataOutputStream 数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。
 
有关详细的API文档可以参看Java API Doc。
 
下面给简单的例子:
import java.io.*;

/**
* Java读取解析二进制数据
*
* @author leizhimin 2008-10-14 12:42:51
*/

public class TestLicenses {
        public static void main(String[] args) throws IOException {
                testDataOutputStream();
                testDataInputStream();
        }

        /**
         * 生成二进制数据文件
         *
         * @throws IOException
         */

        public static void testDataOutputStream() throws IOException {
                DataOutputStream dos = new DataOutputStream(new FileOutputStream("C:\\dos.dat"));
                dos.writeBoolean(true);
                dos.writeByte('a');
                dos.writeDouble(234.44);
                dos.writeFloat(11.23f);
                dos.writeLong(555L);
                dos.writeInt(333);
                dos.writeShort(23);
                dos.writeUTF("UTFString");
                dos.close();
        }

        /**
         * 解析二进制数据文件
         *
         * @throws IOException
         */

        public static void testDataInputStream() throws IOException {
                DataInputStream dis = new DataInputStream(new FileInputStream("C:\\dos.dat"));
                System.out.println(dis.readBoolean());
                System.out.println((char) dis.readByte());
                System.out.println(dis.readDouble());
                System.out.println(dis.readFloat());
                System.out.println(dis.readLong());
                System.out.println(dis.readInt());
                System.out.println(dis.readShort());
                System.out.println(dis.readUTF());
                dis.close();
        }
}
 
运行结果:
true
a
234.44
11.23
555
333
23
UTFString

Process finished with exit code 0
 
运行结果表名,解析完全正确。
 
这里要注意一点,对于字符串的写入和解析,应该选择writeUTF()和readUTF()两个方法。