网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  java中基本数据类型与流的操作方法     
  文章作者:未知  文章来源:水木森林  
  查看:47次  录入:管理员--2007-11-16  
    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联网中使用序列化机制。
 
 
上一篇: 什么是j2me及其基本慨念    下一篇: corba对象生命周期之生命周期的评估
  相关文档
java图像处理技巧四则 11-16
java代码编写的一般性指导 (转贴) 11-17
exp 方法 11-16
基于nokia s60的游戏开发 11-17
在java中实现条件编译 11-17
jfreechart中标题的中文显示问题 11-17
md5算法的java源代码 11-17
java基础--在运行时实现java的多态性 12-04
探索jsf框架中使用的设计模式 11-16
java语言深入--关于java语言的内存泄漏 03-06
《java深度历险》读书笔记(一) 11-17
slg中搜索某个角色可移动区域的算法 11-17
j2se综合:深入理解javahelp结构的好处 02-25
eclipse中使用junit插件测试 11-16
search 方法 11-16
在oracle中用java进行数据操作 11-17
使用xml-encryption实现安全soap消息 11-17
mvc 构架学习之渐行渐进(四) 11-17
面向对象编程:java collection更有效管理elements 11-16
java中数据库连接池原理机制的详细讲解 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息