您的位置:软件 > 开发者网络 > 开发工具 > Java > 正文
Java中基本数据类型与流的操作方法
[文章信息]
作者:CQFZ
时间:2005-02-02
出处:天极BLOG
责任编辑:方舟
[文章导读]
说到Java的基本数据类型必须谈到的两个类是DataInputStream和DataOutputStream
advertisement
热点推荐
· 浅议Visual Basic.NET中HOOK的应用
· 迷你迅雷给IE下载加足马力
· 《大话李白》主题曲 Flash
· Windows操作系统小技巧荟萃(上)
· 新浪UC2005使用技巧四则
[正文]
  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联网程序中使用序列化机制传输数据。下面我们看看如何自己实现序列化,首先我们要有两个构造函数其中一个参数为空。

public Account()
{

}

public Account(String userName, String email, int age, boolean gender)
{
 this.userName = userName;
 this.email = email;
 this.age = age;
 this.gender = gender;
}

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

public void serialize(DataOutputStream dos) throws IOException
{
 dos.writeUTF(userName);
 dos.writeUTF(email);
 dos.writeInt(age);
 dos.writeBoolean(gender);
}

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

public static Account deserialize(DataInputStream dis) throws IOException
{
 Account account = new Account();
 account.userName = dis.readUTF();
 account.email = dis.readUTF();
 account.age = dis.readInt();
 account.gender = dis.readBoolean();
 return account;
}

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

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

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

package com.j2medev.mingjava;
import java.io.*;

public class TestDataIO
{
 public static void main(String[] args) throws IOException
 {
  Account account = new Account("mingjava","eric.zhan@263.net",25,true);
  System.out.println("before serialization.........");
  System.out.println(account.toString());
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  DataOutputStream dos = new DataOutputStream(baos);
  account.serialize(dos);
  DataInputStream dis = new DataInputStream(new ByteArrayInputStream(baos.toByteArray()));
  Account sAccount = Account.deserialize(dis);
  System.out.println("after serialization..........");
  System.out.println(sAccount.toString());
  dos.close();
  dis.close();
 }
}

package com.j2medev.mingjava;
import java.io.*;

public class Account
{
 private String userName = "";
 private String email = "";
 private int age = 0;
 private boolean gender = false;

 public Account()
 {}

 public Account(String userName, String email, int age, boolean gender)
 {
  this.userName = userName;
  this.email = email;
  this.age = age;
  this.gender = gender;
 }

 public void serialize(DataOutputStream dos) throws IOException
 {
  dos.writeUTF(userName);
  dos.writeUTF(email);
  dos.writeInt(age);
  dos.writeBoolean(gender);
 }

 public static Account deserialize(DataInputStream dis) throws IOException
 {
  Account account = new Account();
  account.userName = dis.readUTF();
  account.email = dis.readUTF();
  account.age = dis.readInt();
  account.gender = dis.readBoolean();
  return account;
 }

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

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

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

  序列化成功,后面我将讲述如何在J2ME联网中使用序列化机制。

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • 在Eclipse中使用ANT灵活构建Web应用
  • Hibernate+Spring+Struts扩展Struts
  • 通过Java Swing看透MVC设计模式
  • 详细解析 JavaBeans 与 Ejb 的区别
  • Java的破解和反破解之道
  • 华为否认欲向国外企业出售光纤及接入业务
  • 高清碟机标准迟迟不公布 张宝全欲起诉信产部
  • 手机返券仍有陷阱 专家称部分商家虚抬原价
  • 微软为比利时开发MSN聊天工具的电子身份证
  • 寄出钱易趣说没收到 网上购物“优惠”遭质疑
  • 内地C2C网站集体对接海外 扩展两岸三地市场
  • 企业信息化时代的新兴职业:客户关系管理师
  • 诺基亚光辉岂止区区15年 CEO奥利拉不信邪
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索