`
djsl6071
  • 浏览: 592166 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Java的基本数据类型与流

阅读更多
 Java的基本数据类型与流
使用Java操作二进制文件使用Java操作文本文件两篇文章分别介绍了如何操作二进制文件和文本文件,事实上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联网中使用序列化机制。

分享到:
评论

相关推荐

    java教程课件5基本数据类型与引用类型

    Java教程中的核心知识点主要涉及Java的基本数据类型、引用类型、常用包、对象的内存分配以及字符串操作。下面将对这些内容进行详细的阐述。 1. **基本数据类型与引用类型** - Java的基本数据类型包括布尔型`...

    2022年Java中基本数据类型与流Java教程.docx

    它们分别实现了DataInput和DataOutput接口,这两个接口定义了一系列方法用于将字节流转换为Java基本数据类型和字符串,以及将这些类型的数据转换回字节流。例如,`readInt()`用于读取一个int类型的数据,`...

    Java数据类型练习.doc

    本文档总结了 Java 数据类型的一些基本概念和实践练习题,涵盖了基本类型、变量定义、常量、运算符、控制流、数组、随机数等多方面的知识点。 一、基本类型 Java 中有八种基本类型:byte、short、int、long、float...

    Java数据流编程

    根据数据类型的不同,Java提供了两种类型的流: 1. **字节流**(Byte Stream):处理字节数据,基本类型为`byte`。 2. **字符流**(Character Stream):处理字符数据,基本类型为`char`。 #### 三、单字节流复制 ...

    Java数据类型,Hibernate数据类型,标准sql数据类型之间的对应表

    Java提供了两种主要的数据类型:基本数据类型(如int、char、boolean等)和引用数据类型(如类、接口和数组)。这些数据类型在不同的上下文中有着特定的表示和存储方式。 在数据库领域,Hibernate是一个非常流行的...

    java数据流的概述

    此外,DataInputStream和DataOutputStream则提供了读写基本数据类型(如int、float)的能力。 2. 字符流:Reader和Writer是字符输入流和输出流的基类,它们处理Unicode字符。FileReader和FileWriter专门用于读写...

    Java的IO流讲解代码: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型

    File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型字节流、打印流、对象序列化流、字节数组流)、字符流(缓冲字符流、文件字符流、转换流、格式化输出流、字符数组流) 这份代码源码...

    java 解析Excel 并判断解析的数据类型__Eclipse工程

    本项目名为"java 解析Excel 并判断解析的数据类型__Eclipse工程",显然是一个使用Java语言在Eclipse环境下实现的程序,其主要功能是读取Excel文件并识别其中各单元格的数据类型。 首先,我们需要了解Java中用于解析...

    Java中基本数据类型与流

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

    java 输入输出流

    Java的输入输出流机制是相当强大且灵活的,它提供了多种类型和级别的流来满足不同场景的需求,从基本的字节流到高级的过滤流和对象流,构成了完整的I/O体系。理解和熟练掌握Java的输入输出流对于任何Java开发者来说...

    javasqlTypes数据库字段类型java数据类型的对应关系

    - **JAVA的数据类型**:Java提供了基本数据类型(如`int`、`float`、`boolean`等)以及对象数据类型(如`String`、`Date`等)。在与数据库交互时,我们需要将这些类型映射到相应的SQL类型。 - **SQL数据类型**:...

    [推荐]JAVA第二章变量数据类型和运算符

    Java中的数据类型主要分为两大类:基本数据类型和引用数据类型。基本数据类型包括整型(如`byte`, `short`, `int`, `long`)、浮点型(`float`, `double`)、字符型(`char`)和布尔型(`boolean`)。引用数据类型则...

    JAVA输入与输出 java流基本流程图

    - `PrintStream`:打印各种数据类型的值,常用于调试。 - `PrintWriter`:用于文本输出,可以控制格式。 **字符流** 字符流处理的是16位的Unicode字符数据,主要用来处理文本数据。Java的字符输入流(Char Input ...

    JAVA 字符流与字节流

    - **DataInputStream** 和 **DataOutputStream**:提供了读写基本数据类型(如int, double)的方法,方便数据序列化。 ### 字符流 字符流主要处理字符数据,它是基于Unicode标准的,因此可以正确处理国际化的文本...

    Java流(文件读写操作)

    #### 四、常用的字符流与字节流之间的转换 - **InputStreamReader**:字节流通向字符流的桥梁,可以将字节数据转换成字符数据。 - **OutputStreamWriter**:字符流通向字节流的桥梁,可以将字符数据转换成字节数据...

    Java输入数据流详解

    Java IO包提供了丰富的输入输出类,不仅限于字节流和字符流,还包括对象流(用于序列化和反序列化)、转换流(将字节流与字符流相互转换)以及过滤流(提供额外的功能,如缓冲、字符编码转换等)。这些类和接口共同...

    面向对象编程:Java的简单数据类型

    面向对象编程是现代软件开发的核心概念,而Java作为一种流行的面向对象编程语言,其简单数据类型是编程的基础元素。简单数据类型是由编程语言本身定义的基本构建块,用于表示各种数值、字符和逻辑值。在Java中,简单...

    Java字符流和字节流

    根据处理数据类型的不同,Java I/O流主要分为字节流和字符流两大类。字节流处理的是8位的字节数据,而字符流处理的是16位的Unicode字符。这两种流都有各自的特点和应用场景。 #### 二、字节流 字节流是最基本的数据...

    IO流 javaio java 流

    例如,DataInputStream和DataOutputStream用于处理基本数据类型,GZIPOutputStream用于压缩数据。 4. 文件流: - File类:代表操作系统中的文件或目录,提供了文件操作的基本方法。 - FileInputStream和...

    S1-使用Java语言理解程序逻辑-第二章变量、数据类型和运算符

    Java支持两种主要的数据类型:基本数据类型和引用数据类型。基本数据类型包括整型(如`byte`, `short`, `int`, `long`)、浮点型(`float`, `double`)、字符型(`char`)和布尔型(`boolean`)。引用数据类型则包括...

Global site tag (gtag.js) - Google Analytics