ホームページ  >  記事  >  バックエンド開発  >  シリアル化と逆シリアル化の詳細な紹介

シリアル化と逆シリアル化の詳細な紹介

零下一度
零下一度オリジナル
2017-07-19 16:45:201787ブラウズ

1. シリアル化と逆シリアル化の概念

オブジェクトをバイト列に変換するプロセスをオブジェクトのシリアル化と呼びます。
バイトシーケンスをオブジェクトに復元するプロセスは、オブジェクトの逆シリアル化と呼ばれます。
オブジェクトのシリアル化には主に 2 つの用途があります: 1) オブジェクトのバイト シーケンスをハードディスク (通常はファイル) に永続的に保存します。
2) オブジェクトのバイト シーケンスをネットワーク上に送信します。

多くのアプリケーションでは、特定のオブジェクトをメモリ空間から離れて物理ハードディスクに長期保存できるようにシリアル化する必要があります。たとえば、最も一般的なのは Web サーバー内の Session オブジェクトです。100,000 人のユーザーが同時にアクセスすると、100,000 個の Session オブジェクトが存在し、メモリが多すぎる可能性があるため、Web コンテナは一部のセッションをハードウェアにシリアル化します。ディスクを最初に使用するなど、ハードディスクに保存されているオブジェクトをメモリに復元します。

2 つのプロセスがリモートで通信している場合、さまざまな種類のデータを相互に送信できます。データの種類に関係なく、データはバイナリ シーケンスの形式でネットワーク上に送信されます。送信者は、ネットワーク上に送信する前に、この Java オブジェクトをバイト シーケンスに変換する必要があり、受信者は、バイト シーケンスを Java オブジェクトに復元する必要があります。 json をシリアル化するプロセスは、それをファイルに書き込み、別のプログラミング言語で呼び出すことです。 ":

"sb",

"test":

"hard"}
with

open(

"file",) "w") as f: f.write(json.dumps(info))



上記のコードは、json を使用して情報辞書の情報をファイルに書き込みます。ファイルには文字列形式の情報またはバイナリ ファイル情報のみを保存でき、ファイルに入力される情報はすべて文字列型であるため、数値などの情報は保存できません。

jsonデシリアライズの処理:
''
with
open(
"file",
"r")
as f:
data = json.loads(f.read() )
print(data)

print(type( data))

print(data[

"alex"])





上記のコードは、以下に示すように、json 形式で保存された情報を読み取ります。

{'test': 'hard', 'alex': 'sb'}

sb
上記のコードは実際には文字列情報を辞書に読み込む機能を実装しています。逆シリアル化は、最初に元の形式を文字列に変換し、それを読み取って対話を実現するプロセスです。

次のように、シリアル化と逆シリアル化に他のメソッドを使用することもできます。次のように、文字列情報を元のスタイルに変換できる関数 eval() があることがわかっています。 ,33,

65,

33] with open("test.text","w") as f:
f.write(
str(info)) #Use wirte( )はファイルに文字列形式の情報のみを書き込むことができ、他の種類の情報を書き込むことはできません
with open("test.text","r")
as f_obj: data = f_Obj.read( )
data = eval (データ) Print (Type (データ))
Print (データ)



プログラムは次のように実行されます:
この関数はシリアル化とデシリアライズの処理も実装していますが、シリアル化とデシリアライズは同じプログラム内で実装されているため、他のプログラムに eval() があるかは不明ですが、json はすべてのプログラミング言語をサポートしているため、json は現在一般に、異なるプログラミング言語間の情報対話を実現するために使用されます。
ダンプとロードも上記のダンプとロードの機能を実装しますが、実装方法が異なり、次のように構文が若干異なります:
ダンプのシリアル化:

import json

info = {"alex":
"sb",
"test":
"hard"}

with open(

"file",

"w") as f: json.dump(info , f)





load() 逆シリアル化:

import json

'''逆シリアル化の始まりは、異なるプログラミング言語の相互作用を実現するためにdumpから情報を抽出することです'''

with open("file ", "r") as f:
,
上記のプログラムは、シリアル化と逆シリアル化、ダンプ(情報、ファイルパス)、ロード(ファイルパス)、どのファイルから読み取るか、情報を取得する機能を実装しています。
異なるプログラム間のデータ交換を実現します。
異なるプログラム間のデータ交換、または文字列情報を元の形式に変換する
eval()
関数も非常に強力で、文字列情報を次のように変換できます。以下:
>>> dic = "{'alex':'sb','try':'workhard'}"
>>> data = eval(dic)
>> ;> data
{'try': 'workhard', 'alex': 'sb'}
プログラムはダンプとロードを 1 回のみ行い、複数回ダンプすることはできません。ダンプは複数のファイルに実装されています。

以上がシリアル化と逆シリアル化の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。