首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 基本資料型別與資料流操作實戰指南

     編輯:Java 相關知識

核心概念:基本資料型別與 Data 流

Java 的 I/O 體系中,除了處理二進位檔案與文字檔案外,還提供了針對基本資料型別的操作機制。這裡所謂的「Data」指的就是 Java 的八大基本型別(byte、short、int、long、float、double、char、boolean)以及 String 類別。

關鍵類別:DataInputStream 與 DataOutputStream

操作基本型別的核心類別是 DataInputStream 和 DataOutputStream。它們的方法實際上定義在 DataInput 和 DataOutput 兩個介面中,功能是將位元組流轉換為 Java 基本型別,並支援以 UTF-8 編碼讀寫字串。值得注意的是,RandomAccessFile 同時實作了這兩個介面,使其能對同一檔案進行隨機讀寫。

方法命名慣例與自訂序列化

這兩個類別的方法命名極為規則:readXXX() 和 writeXXX(),其中 XXX 代表型別名稱。利用這機制,我們可以手動實作物件序列化——按固定順序寫入欄位,再按相同順序讀出。這在 J2ME 等無法使用標準序列化的環境中特別實用。

實戰範例:Account 物件的序列化與反序列化

public class Account {
    private String userName;
    private String email;
    private int age;
    private boolean gender; // true = male, false = female

    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;
    }

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

測試程式碼

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);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);
        account.serialize(dos);

        DataInputStream dis = new DataInputStream(
            new ByteArrayInputStream(baos.toByteArray()));
        Account restored = Account.deserialize(dis);

        System.out.println("after serialization..........");
        System.out.println(restored);

        dos.close();
        dis.close();
    }
}

執行結果驗證

控制台輸出確認序列化過程完美還原了物件狀態:

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

重點提醒

  • 讀寫順序必須完全一致,否則會導致資料錯位或 EOFException。
  • writeUTF/readUTF 使用修改版 UTF-8 編碼,適合字串傳輸。
  • 此為手動序列化,不涉及 Serializable 介面與 serialVersionUID。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved