java常用流类型_Java中基本数据类型与流

Java中基本数据类型与流

更新时间:2006年10月13日 00:00:00   作者:

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联网中使用序列化机制。

相关文章

1a1b05c64693fbf380aa1344a7812747.png

这篇文章主要介绍了JSP中常用的JSTL fmt(format格式化)标签用法整理,fmt的格式化处理遵循i18n国际化格式标准,需要的朋友可以参考下2016-04-04

4f55910a645b073bc4fc65dc10dc14bd.png

天猫php判断移动设备的正则(个人猜测),觉得很好用,于是就决定移植到JSP里面,大家可以参考下2014-03-03

0ea3c7666119d5615e582f823fb3fad6.png

这篇文章主要介绍了jsp 实现的简易mvc模式,结合实例形式简单分析了jsp实现的MVC模式模型、视图、控制器相关配置与使用操作技巧,需要的朋友可以参考下2019-11-11

4f96a78db829b1556ff16de21e013c7a.png

多个文件上传是很多时候都会遇到的问题,本文主要介绍了基于jsp的AJAX多文件上传的实现内容,这里整理了详细的代码,有需要的朋友可以参考一下。2016-10-10

8cc1031babc6aff2319f1c6af8544aa0.png

处理jsp显示文字过长问题的解决方法,需要的朋友可以参考一下2013-03-03

0c932a99bb7b6f23c937db507070cc7b.png

这篇文章主要介绍了JSP 获取本地图片的实例详解的相关资料,希望通过本文能帮助道到大家,需要的朋友可以参考下2017-09-09

cca732bf65a93ed2ec0ac80c638460fe.png

Servlet动态网页技术详解,需要的朋友可以参考一下2013-03-03

2d9f31f2af7b675a3d153d2b7f1035a7.png

这篇文章主要介绍了JSP+EXt2.0实现分页的方法,涉及JavaScript结合JSP遍历及分页的技巧,具有一定参考借鉴价值,需要的朋友可以参考下2015-09-09

b452cee8ec5cd9e58ab98eba17281e59.png

JSP指令元素部分(page指令、include指令、taglib指令),今天抽时间复习了一下,并对心得进行了整理,下面与大家分享下,希望对大家学习jsp有所帮助2013-07-07

f4838ec7e2d4da28e0b57d4e852dadd4.png

这篇文章主要介绍了Spring 配置文件XML头部文件模板实例详解的相关资料,需要的朋友可以参考下2017-04-04

最新评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值