社区编辑申请
注册/登录
Java中基本数据类型与应用
开发 后端
Java中除了二进制文件和使用文本文件外还有基于Data的数据操作,这里的Data指的是Java的基本数据类型和String。基本数据类型包括byte、int、char、long、float、double、boolean和short。

Java中除了二进制文件和使用文本文件外还有基于Data的数据操作,这里的Data指的是Java的基本数据类型和String。基本数据类型包括byte、int、char、long、float、double、boolean和short。

说到Java的基本数据类型必须谈到的两个类是DataInputStream和DataOutputStream。它们提供了对Java基本数据类型的操作,但是这些方法事实上是在两个重要的接口中定义的DataInput和DataOutput,它们的功能就是把二进制的字节流转换成 Java的基本数据类型,同时还提供了从数据中使用UTF-8编码构建String的功能。

有一个重要的类RandomAccessFile实现了 DataInput和DataOutput两个接口使得他能够对文件同时进行写和读的操作。

在DataInputStream和DataOutputStream两个类中的方法都很简单,基本结构为readXXXX()和 writeXXXX()其中XXXX代表基本数据类型或者String。在这里不多讲述,不过值得一提的是我们有必要读读java中unicode的编码规则,在API doc中有比较详细的介绍。

通常我们的对象有很多都是由java的基本数据类型构成的,比如一个人的信息包括姓名,电子信箱,电话号码和性别等。其实我们可以用DataInputStream中的方法和DataOutputStream中的方法按照一定的序列把数据写入流中再按照相同的序列把他们读取出来,这就是我们自己实现的序列化,这可以用在数据传输中,比如在J2ME联网程序中使用序列化机制传输数据。下面我们看看如何自己实现序列化,首先我们要有两个构造函数其中一个参数为空。

  1. public Account()  
  2. {  
  3. }  
  4. public Account(String userName, String email, int age, boolean gender)  
  5. {  
  6. this.userName = userName;  
  7. this.email = email;  
  8. this.age = age;  
  9. this.gender = gender;  

当我们进行序列化的时候也很简单,我们只是往DataOutputStream中按照顺序写入对象的成员变量。例如:

  1. public void serialize(DataOutputStream dos) throws IOException  
  2. {  
  3. dos.writeUTF(userName);  
  4. dos.writeUTF(email);  
  5. dos.writeInt(age);  
  6. dos.writeBoolean(gender);  

当我们进行反序列化的时候则按照相同的顺序从DataInputStream里面读取数据并赋值给成员变量。例如:

  1. public static Account deserialize(DataInputStream dis) throws IOException  
  2. {  
  3. Account account = new Account();  
  4. account.userName = dis.readUTF();  
  5. account.email = dis.readUTF();  
  6. account.age = dis.readInt();  
  7. account.gender = dis.readBoolean();  
  8. return account;  

为了便于调试我们还提供一个toString()的方法打印出对象的实际信息。这是个好的习惯。

  1. public String toString()  
  2. {  
  3. return "UserName = " + userName + " Email = " + email + " age = " + age + " gender = " + (gender ? "male" : "female");  

为了测试序列化我们编写下面的程序进行测试,代码比较简单。

  1. package com.j2medev.mingjava;  
  2. import java.io.*;  
  3. public class TestDataIO  
  4. {  
  5. public static void main(String[] args) throws IOException  
  6. {  
  7. Account account = new Account("mingjava","eric.zhan@263.net",25,true);  
  8. System.out.println("before serialization.........");  
  9. System.out.println(account.toString());  
  10. ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  11. DataOutputStream dos = new DataOutputStream(baos);  
  12. account.serialize(dos);  
  13. DataInputStream dis = new DataInputStream(new ByteArrayInputStream(baos.toByteArray()));  
  14. Account sAccount = Account.deserialize(dis);  
  15. System.out.println("after serialization..........");  
  16. System.out.println(sAccount.toString());  
  17. dos.close();  
  18. dis.close();  
  19. }  
  20. }  
  21. package com.j2medev.mingjava;  
  22. import java.io.*;  
  23. public class Account  
  24. {  
  25. private String userName = "";  
  26. private String email = "";  
  27. private int age = 0;  
  28. private boolean gender = false;  
  29. public Account()  
  30. {}  
  31. public Account(String userName, String email, int age, boolean gender)  
  32. {  
  33. this.userName = userName;  
  34. this.email = email;  
  35. this.age = age;  
  36. this.gender = gender;  
  37. }  
  38. public void serialize(DataOutputStream dos) throws IOException  
  39. {  
  40. dos.writeUTF(userName);  
  41. dos.writeUTF(email);  
  42. dos.writeInt(age);  
  43. dos.writeBoolean(gender);  
  44. }  
  45. public static Account deserialize(DataInputStream dis) throws IOException  
  46. {  
  47. Account account = new Account();  
  48. account.userName = dis.readUTF();  
  49. account.email = dis.readUTF();  
  50. account.age = dis.readInt();  
  51. account.gender = dis.readBoolean();  
  52. return account;  
  53. }  
  54. public String toString()  
  55. {  
  56. return "UserName = " + userName + " Email = " + email + " age = " + age + " gender = " + (gender ? "male" : "female");  
  57. }  

编译运行程序在控制台输出:

  1. before serialization.........  
  2. UserName = mingjava Email = eric.zhan@263.net age = 25 gender = male 
  3. after serialization..........  
  4. UserName = mingjava Email = eric.zhan@263.net age = 25 gender = male 

序列化成功!

【编辑推荐】

  1. Java中的Collection类
  2. 学习java大概步骤
  3. 在Java中>、>>、>>>三者的区别
  4. Java新手入门的30个基本概念
  5. Java中的四个核心技术思想
责任编辑:于铁 来源: 互联网
相关推荐

2020-10-26 13:46:07

Java基础入门篇

2020-10-29 10:28:31

Java数据类型

2022-02-15 14:09:51

Java编程线程

2010-08-26 10:13:52

DB2java连接

2009-06-25 14:20:01

Java枚举类型

2011-06-01 16:31:23

枚举

2009-01-08 21:33:34

2009计算机等级考试二级

2015-10-27 09:41:16

Javaintern

2009-06-17 13:19:50

Java调用DLL

2015-11-16 10:24:45

Java常量池字符串

2010-03-10 14:18:36

Python数组

2011-12-06 09:42:51

Java

2021-05-31 08:59:57

Java数据库访问JDBC

2021-04-14 18:05:47

Java内存对象

2021-06-09 09:36:18

DjangoElasticSearLinux

2020-06-09 08:13:15

PHP数据结构

2009-10-16 16:01:07

VB.NET实现叠代使

2020-11-10 09:00:00

JavaMule ESB开发

2014-04-30 12:04:43

2011-05-31 10:00:21

Android Spring 依赖注入

同话题下的热门内容

超全!Python图形界面框架PyQt5使用指南!太强了!Python 开发桌面小工具,让代码替我们干重复的工作!Python居然被用来开发游戏了?盘点你想不到的Python开发场景浅谈Python+requests+pytest接口自动化测试框架的搭建跟着 Guava 学 Java 之 不可变集合Python轻量级Web框架:Bottle库!用 Taichi 加速 Python:提速 100+ 倍!实战 | 如何用 Python 自动化监控文件夹完成服务部署!

编辑推荐

使用Kotlin做开发一个月后的感想面试官问你什么是消息队列?把这篇甩给他!五大自动化测试的Python框架图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)2018年最流行的十大编程语言,其中包括你用的语言吗?
我收藏的内容
点赞
收藏

51CTO技术栈公众号