シーケンス化と逆シーケンス化の理解
4838 ワード
スレ主の問題は面白いですが、シーケンス化と逆シーケンスの応用シーンを間違えました.シーケンス化と逆シーケンス化はJAVAにとって(他のオブジェクト向け言語もあるかもしれません)の、シーケンス化されたエンティティはオブジェクトであり、結果もオブジェクトであり、フォーマットされたテキストではありません.手帳で見たショッピング情報は記録を保存しますが、実はオブジェクトシーケンス化の結果ではなく、オブジェクトが出力したフォーマットされたテキストで、本当のシーケンス化されたオブジェクトは読めません.実際にオブジェクトシーケンス化を使用する場合、[シーンを適用](Apply Scene)オブジェクトを永続化ストレージにシーケンス化する(ローカルハードディスク)、私達はこの時ファイルの解析をしたくなくて、同じく誰もこの持続化のファイルを読みたくなくて、私達が必要とする時、直接逆シーケンス化を採用して保存したファイルをオブジェクトに生成することができます;別の1種の応用シーンはネットの伝送の過程の中で、この時オブジェクトは異なっているホストの上で伝播して、シーケンス化はオブジェクトをコードのストリームに変えて対端から解析して、この解分析過程には人参は必要ない.普通の文字列は解析されたオブジェクトで、あるオブジェクトから文字列に解析ロジックを加えなければならないので、やっと理解できます.シーケンス化の結果、JAVA仮想マシンのみが認識するファイルであり、人間は参加せず、オブジェクトの保存や転送にのみ使用されます.あなたの問題は解決しましたか.
問い詰める
に答える
問い詰める
に答える
問い詰める
に答える
問い詰める
に答える
import java.io.Serializable;
import java.io.*;
public class Cat implements Serializable {
private String name;
public Cat() {
this.name = "new cat";
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
Cat cat = new Cat();
try {
FileOutputStream fos = new FileOutputStream("catDemo.out");//これがシーケンス化されたファイルの格納場所であり、自分で制御されます.
ObjectOutputStream oos = new ObjectOutputStream(fos);
System.out.println("1> "+ cat.getName());
cat.setName("My Cat");
oos.writeObject(cat);
oos.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
try {
FileInputStream fis = new FileInputStream("catDemo.out");
ObjectInputStream ois = new ObjectInputStream(fis);
cat = (Cat) ois.readObject();
System.out.println("2> "+ cat.getName());
ois.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
出力内容:
申し訳ございませんが、回答者がアップロードした添付ファイルは失効しています
問い詰める
に答える
問い詰める
に答える
問い詰める
に答える
シーケンス化は操作であり、シーケンス化する必要はありません.シーケンス化するのは、このオブジェクトをファイルシステムに保存したいからです.
シーンを想像します.
あなたはゲームを開発しました.ゲームには人物がいて、人物には属性があります.彼が今持っているお金は、ユーザーが半分までゲームを保存することを選択したとき、2つの案があります.ユーザーのお金をtxtに保存し、次回ゲームをロードするときにtxtからお金を読み取り、ユーザーに続けて遊ばせる. はオブジェクトのシーケンス化を行い、オブジェクトをファイルシステムに保存し、次回プレイ可能なときに逆シーケンス化ロードを使用します.
しかし、1つ目の案には、txtにお金が保存されていることを知っていれば、自分でお金を999999に変えることができ、対象シーケンス化方式ではできないという欠点がある.
最后に、あなたはJAVAの中のオブジェクトを理解していないで、オブジェクトはメモリの中で保存して、それはあなたがシーケンス化した后にそれが存在しないためではありませんて、シーケンス化はオブジェクトのデータを1部コピーして、シーケンス化して、それからファイルシステムに出力して、本当のオブジェクトはやはりプログラムの中にあります.
あなたがゲームを半分游んでいるように、突然ファイルを保存したいと思って、それから対象をシーケンス化しましたが、ゲームはまだ続いていますね.中の人物も死んでいません.人という対象はメモリの中に存在しています.
are we clear?
問い詰める
? , ?
, ? ? , : , , , ,
に答える
。
, , 。
object monkey
{
String monkeyName = " ";
long monkeyAge = 1000;
}
:
;
10000;
, , 。
, , , , , , 。
are we clear?
問い詰める
good!, , , ? ? 5 , 2 , 10 , , , , 10 , , ?
に答える
, , 。
, , 。
, 。
問い詰める
, , ?
.txt , 4 , ? ? , , 4 , , ?
に答える
, txt。
, txt , , , 。
txt ,txt , , 。
問い詰める
, , ?
に答える
import java.io.Serializable;
import java.io.*;
public class Cat implements Serializable {
private String name;
public Cat() {
this.name = "new cat";
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
Cat cat = new Cat();
try {
FileOutputStream fos = new FileOutputStream("catDemo.out");//これがシーケンス化されたファイルの格納場所であり、自分で制御されます.
ObjectOutputStream oos = new ObjectOutputStream(fos);
System.out.println("1> "+ cat.getName());
cat.setName("My Cat");
oos.writeObject(cat);
oos.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
try {
FileInputStream fis = new FileInputStream("catDemo.out");
ObjectInputStream ois = new ObjectInputStream(fis);
cat = (Cat) ois.readObject();
System.out.println("2> "+ cat.getName());
ois.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
出力内容:
申し訳ございませんが、回答者がアップロードした添付ファイルは失効しています
問い詰める
.out , ? , .txt , ?
out , .txt ? ?
?
に答える
catDemo.out , , JAVA , 。
txt, , 。
, , 。
問い詰める
, txt 。 : .txt ? catDemo.out ?
catDemo.out , .txt?
catDemo.out , .txt , ?
に答える
, 。
, , 。
問い詰める
, , , ?
, catDemo.out , ? txt , txt , catDemo.out , catDemo.out ?
に答える
シーケンス化は操作であり、シーケンス化する必要はありません.シーケンス化するのは、このオブジェクトをファイルシステムに保存したいからです.
シーンを想像します.
あなたはゲームを開発しました.ゲームには人物がいて、人物には属性があります.彼が今持っているお金は、ユーザーが半分までゲームを保存することを選択したとき、2つの案があります.
しかし、1つ目の案には、txtにお金が保存されていることを知っていれば、自分でお金を999999に変えることができ、対象シーケンス化方式ではできないという欠点がある.
最后に、あなたはJAVAの中のオブジェクトを理解していないで、オブジェクトはメモリの中で保存して、それはあなたがシーケンス化した后にそれが存在しないためではありませんて、シーケンス化はオブジェクトのデータを1部コピーして、シーケンス化して、それからファイルシステムに出力して、本当のオブジェクトはやはりプログラムの中にあります.
あなたがゲームを半分游んでいるように、突然ファイルを保存したいと思って、それから対象をシーケンス化しましたが、ゲームはまだ続いていますね.中の人物も死んでいません.人という対象はメモリの中に存在しています.
are we clear?