Java でシリアル化と逆シリアル化を使用してオブジェクトの永続性を実現するにはどうすればよいですか?
はじめに:
Java 開発では、オブジェクトの永続化はデータの長期保存を実現する重要な方法です。シリアル化と逆シリアル化は、Java でオブジェクトの永続性を実現するために一般的に使用される方法の 1 つです。この記事では、シリアル化と逆シリアル化の概念と、Java でシリアル化と逆シリアル化を使用してオブジェクトの永続性を実現する方法を紹介します。
1. シリアル化と逆シリアル化とは何ですか?
シリアル化は、ネットワーク送信やディスクへの保存などの操作中にオブジェクトをコピーして送信できるように、オブジェクトをバイト ストリームに変換するプロセスです。逆シリアル化は、バイト ストリームをオブジェクトに再変換し、オブジェクトの状態とデータを復元するプロセスです。 Java では、オブジェクトのシリアル化と逆シリアル化は、Serializable インターフェイスを実装することによって実現されます。
2. シリアル化の実装メソッド
Java は、バイト ストリーム ベースのシリアル化と文字ストリーム ベースのシリアル化という 2 つの主要なシリアル化メソッドを提供します。
1. バイト ストリームに基づくシリアル化
バイト ストリームに基づくシリアル化は、ObjectOutputStream クラスと ObjectInputStream クラスを通じて実装できます。以下は、バイト ストリーム ベースのアプローチを使用してオブジェクトをシリアル化および逆シリアル化する方法を示すサンプル コードです。
import java.io.*; public class ByteStreamSerializationDemo { public static void main(String[] args) { // 将对象序列化为字节流 try { // 创建一个待序列化的对象 Person person = new Person("Tom", 30); // 创建一个输出流 FileOutputStream fileOutputStream = new FileOutputStream("person.obj"); ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); // 将对象写入输出流 objectOutputStream.writeObject(person); // 关闭输出流 objectOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } // 将字节流反序列化为对象 try { // 创建一个输入流 FileInputStream fileInputStream = new FileInputStream("person.obj"); ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); // 读取对象数据 Person person = (Person) objectInputStream.readObject(); // 打印对象数据 System.out.println(person.getName()); // 输出:Tom System.out.println(person.getAge()); // 输出:30 // 关闭输入流 objectInputStream.close(); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } } class Person implements Serializable { private String name; private int age; // 构造方法、getter和setter省略 public Person(String name, int age) { this.name = name; this.age = age; } }
上記のコードでは、まずシリアル化する Person オブジェクトを作成し、次に FileOutputStream クラスと ObjectOutputStream クラスを通じてオブジェクトをバイト ストリームにシリアル化し、ファイルに書き込みます。次に、FileInputStream クラスと ObjectInputStream クラスを通じてファイル内のバイト ストリームをオブジェクトに逆シリアル化し、最後にオブジェクトの属性値を出力します。
2. 文字ストリームベースのシリアル化
文字ストリームベースのシリアル化は、ObjectWriter クラスと ObjectReader クラスを通じて実装できます。
import java.io.*; public class CharacterStreamSerializationDemo { public static void main(String[] args) { // 将对象序列化为字符流 try { // 创建一个待序列化的对象 Person person = new Person("Tom", 30); // 创建一个Writer FileWriter fileWriter = new FileWriter("person.txt"); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); ObjectWriter objectWriter = new ObjectWriter(bufferedWriter); // 将对象写入字符流 objectWriter.writeObject(person); // 关闭字符流 objectWriter.close(); } catch (IOException e) { e.printStackTrace(); } // 将字符流反序列化为对象 try { // 创建一个Reader FileReader fileReader = new FileReader("person.txt"); BufferedReader bufferedReader = new BufferedReader(fileReader); ObjectReader objectReader = new ObjectReader(bufferedReader); // 读取对象数据 Person person = (Person) objectReader.readObject(); // 打印对象数据 System.out.println(person.getName()); // 输出:Tom System.out.println(person.getAge()); // 输出:30 // 关闭字符流 objectReader.close(); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } } class Person implements Serializable { private String name; private int age; // 构造方法、getter和setter省略 public Person(String name, int age) { this.name = name; this.age = age; } }
上記のコードでは、FileWriter、BufferedWriter、および ObjectWriter クラスを通じてオブジェクトを文字ストリームにシリアル化し、ファイルに書き込みます。次に、ファイル内の文字ストリームは、FileReader、BufferedReader、ObjectReader クラスを通じてオブジェクトに逆シリアル化され、最終的にオブジェクトの属性値を出力できます。
3. 注意事項
Java でシリアル化と逆シリアル化を使用してオブジェクトの永続化を実現する場合、次の点に注意する必要があります:
1. オブジェクトのクラスは次のとおりである必要があります。 Serializable インターフェイスが実装されていないと、シリアル化と逆シリアル化を実行できません。
2. シリアル化されたクラス内のすべての参照オブジェクトもシリアル化可能である必要があります。
3. シリアル化および逆シリアル化されたクラスのフィールドは、カスタム クラス、基本データ型、コレクション型など、任意の型にすることができます。
4. シリアル化および逆シリアル化されたクラスのフィールドは一時的に変更される可能性があり、永続化されません。
結論:
この記事の導入部を通じて、シリアル化と逆シリアル化とは何かを学び、Java でシリアル化と逆シリアル化を使用してオブジェクトの永続性を実現する方法をコード例を通じて示しました。実際の開発では、シリアライズの仕様や注意事項に従うことで、ニーズに応じて適切なシリアライズ方法を選択することで、オブジェクトの長期保存や送信を実現できます。
以上がJava でシリアル化と逆シリアル化を使用してオブジェクトの永続性を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版
中国語版、とても使いやすい

Dreamweaver Mac版
ビジュアル Web 開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
