Syntax | سینتکس
2.98K subscribers
423 photos
111 videos
35 files
392 links
Download Telegram
Serialization و Encoding

Serialization
سریالیزیشن فرآیندی است که طی آن یک شیء (object) در حافظه به یک فرمت قابل حمل تبدیل می‌شود تا بتوان آن را ذخیره کرد یا از طریق شبکه ارسال نمود. این فرایند شامل تبدیل وضعیت (state) یک شیء به یک رشته بایت (byte stream) است که می‌تواند بعداً deserialized شود تا شیء اصلی بازیابی شود.

موارد استفاده از Serialization:
- ذخیره‌سازی پایدار: برای ذخیره‌سازی اشیاء در فایل‌ها یا پایگاه داده‌ها به طوری که بتوان بعداً آنها را بازیابی کرد.
- انتقال داده‌ها: برای ارسال اشیاء بین سیستم‌های مختلف از طریق شبکه، مثلاً در پروتکل‌های ارتباطی یا وب سرویس‌ها.
- کپی عمیق (Deep Copy): برای ایجاد نسخه‌ای دقیق از یک شیء.

فرمت‌های متداول Serialization:
- JSON: یک فرمت متنی سبک که برای تبادل داده‌ها بین سرور و وب مناسب است.
- XML: یک فرمت متنی که برای ذخیره و انتقال داده‌ها استفاده می‌شود و بیشتر در سیستم‌های سازمانی کاربرد دارد.
- Protocol Buffers: یک فرمت باینری کارآمد و فشرده که توسط گوگل توسعه یافته است.
- Avro: یک فرمت باینری که توسط Apache برای استفاده در سیستم‌های بزرگ داده‌ای توسعه یافته است.

Encoding

فرآیندی است که طی آن داده‌ها به یک فرمت خاص تبدیل می‌شوند تا قادر به انتقال یا ذخیره‌سازی باشند. این فرایند می‌تواند شامل تبدیل داده‌های متنی به یک فرمت باینری خاص یا تبدیل داده‌های باینری به یک فرمت متنی باشد.

موارد استفاده از Encoding:
- انتقال داده‌ها: برای اطمینان از اینکه داده‌ها به درستی از طریق شبکه منتقل می‌شوند.
- ذخیره‌سازی داده‌ها: برای اطمینان از اینکه داده‌ها به درستی در فایل‌ها یا پایگاه داده‌ها ذخیره می‌شوند.
- نمایش داده‌ها: برای تبدیل داده‌ها به فرمتی که قابل نمایش یا چاپ باشد.

فرمت‌های متداول Encoding:
- UTF-8: یک فرمت متنی که برای رمزگذاری کاراکترهای یونیکد استفاده می‌شود.
- Base64: یک فرمت متنی که برای رمزگذاری داده‌های باینری استفاده می‌شود به طوری که بتوان آنها را در متن‌های ASCII ذخیره یا انتقال داد.

تفاوت بین Serialization و Encoding

1. هدف:
- Serialization: هدف اصلی serialization تبدیل یک شیء به یک فرم قابل حمل است که بتوان آن را ذخیره یا منتقل کرد و سپس دوباره به شیء اصلی تبدیل نمود.
- Encoding: هدف اصلی encoding تبدیل داده‌ها به یک فرمتی است که قابل انتقال، ذخیره یا نمایش باشد.

2. نوع داده‌ها:
- Serialization: معمولاً شامل تبدیل اشیاء پیچیده و داده‌های ساختاریافته به یک رشته بایت است.
- Encoding: معمولاً شامل تبدیل داده‌های متنی یا باینری به یک فرمت خاص برای انتقال یا ذخیره‌سازی است.

3. فرایند معکوس:
- Serialization: فرایند معکوس serialization، deserialization نامیده می‌شود که طی آن رشته بایت به شیء اصلی تبدیل می‌شود.
- Encoding: فرایند معکوس encoding به decoding معروف است که طی آن داده‌های رمزگذاری شده به فرم اولیه خود بازگردانده می‌شوند.

4. سطح کاربرد:
- Serialization: بیشتر در سطح برنامه‌نویسی و برای انتقال اشیاء بین سیستم‌ها و ذخیره‌سازی پایدار استفاده می‌شود.
- Encoding: بیشتر در سطح شبکه و انتقال داده‌ها و برای اطمینان از اینکه داده‌ها به درستی منتقل یا ذخیره می‌شوند استفاده می‌شود.

#encoding #serialization

@Syntax_fa
👍91👎1
Syntax | سینتکس
Serialization و Encoding Serialization سریالیزیشن فرآیندی است که طی آن یک شیء (object) در حافظه به یک فرمت قابل حمل تبدیل می‌شود تا بتوان آن را ذخیره کرد یا از طریق شبکه ارسال نمود. این فرایند شامل تبدیل وضعیت (state) یک شیء به یک رشته بایت (byte stream)…
توضیحات ساده تر

مفهوم serialization و encoding گاهی ممکن است کمی گیج‌کننده باشد، خصوصاً زمانی که صحبت از تبدیل داده‌ها به فرمت‌های مختلف می‌شود. بیاید یک مثال بزنیم:

تبدیل دیکشنری به JSON

زمانی که یک دیکشنری (یا هر ساختار داده‌ای دیگر) را به JSON تبدیل می‌کنیم، این عملیات serialization نام دارد. در این فرآیند، داده‌های ساختاریافته به یک رشته متنی تبدیل می‌شوند. این رشته متنی، نمایشی از داده‌های اصلی است که در حافظه برنامه وجود دارد.

JSON به عنوان Byte Array


درست است که هر رشته متنی (مانند JSON) در نهایت به صورت بایت‌ها (byte array) در حافظه ذخیره می‌شود، اما این تبدیل به طور ضمنی توسط سیستم انجام می‌شود. یعنی، وقتی ما یک دیکشنری را به JSON تبدیل می‌کنیم، نتیجه یک رشته متنی (string) است که در حافظه به صورت بایت‌ها ذخیره می‌شود. این رشته متنی را می‌توانیم به یک فایل ذخیره کنیم یا از طریق شبکه ارسال کنیم.

تفاوت بین Serialization و
Encoding

- Serialization: فرایندی است که داده‌های ساختاریافته را به یک فرمت قابل انتقال یا ذخیره‌سازی (مانند JSON یا XML) تبدیل می‌کند. این عملیات معمولاً شامل تبدیل داده‌های پیچیده به رشته‌های متنی یا باینری است. هدف از serialization این است که داده‌ها را به شکلی تبدیل کنیم که بتوان آنها را ذخیره کرد یا از طریق شبکه انتقال داد.

- Encoding: فرایندی است که داده‌ها را به یک فرمت خاص برای انتقال یا ذخیره‌سازی تبدیل می‌کند. این ممکن است شامل تبدیل داده‌های متنی یا باینری به یک فرمت دیگر باشد. برای مثال، تبدیل یک رشته JSON به Base64 یک عملیات encoding است.

پس

زمانی که دیکشنری را به JSON تبدیل می‌کنیم، نتیجه یک رشته متنی است. این رشته متنی به طور ضمنی به بایت‌ها تبدیل می‌شود زیرا رشته‌ها در حافظه به صورت بایت‌ها ذخیره می‌شوند. اما این تبدیل به بایت‌ها به معنای encoding نیست.

چرا این تبدیل encoding نیست؟

- Serialization: زمانی که دیکشنری را به JSON تبدیل می‌کنیم، این عملیات serialization است زیرا ما داده‌های ساختاریافته را به یک فرمت متنی (JSON) تبدیل کرده‌ایم.
- Encoding: اگر بخواهیم این JSON را به فرمت دیگری (مانند Base64) تبدیل کنیم تا برای انتقال مناسب‌تر باشد، این عملیات encoding است.

مثال

1. Serialization:
- دیکشنری را به JSON تبدیل می‌کنیم.
- نتیجه: یک رشته متنی (مثلاً {"key": "value"}).

2. Encoding:
- JSON را به Base64 تبدیل می‌کنیم.
- نتیجه: یک رشته متنی دیگر که نمایشی از داده‌های اصلی است (مثلاً eyJrZXkiOiAidmFsdWUifQ==).

#serialization #encoding

@Syntax_fa
👍62
Syntax | سینتکس
توضیحات ساده تر مفهوم serialization و encoding گاهی ممکن است کمی گیج‌کننده باشد، خصوصاً زمانی که صحبت از تبدیل داده‌ها به فرمت‌های مختلف می‌شود. بیاید یک مثال بزنیم: تبدیل دیکشنری به JSON زمانی که یک دیکشنری (یا هر ساختار داده‌ای دیگر) را به JSON تبدیل…
من هنوز فکر میکنم توضیح بیشتر نیازه ولی این دیگه آخریشه 😂

پس میشه گفت encoding زمانی اتفاق می افتد که یک byte array را به یک فرمت دیگه از byte array تبدیل کنیم ؟

دقیقاً. Encoding فرایندی است که طی آن یک byte array (آرایه ای از بایت ها) به یک فرمت دیگر از byte array تبدیل می‌شود. هدف از encoding معمولاً این است که داده‌ها به شکلی تبدیل شوند که برای انتقال، ذخیره‌سازی یا نمایش آسان‌تر یا امن‌تر باشند.

توضیح بیشتر با مثال


مثال 1:
Base64 Encoding
یک روش encoding است که داده‌های باینری را به یک رشته متنی تبدیل می‌کند که شامل تنها کاراکترهای قابل چاپ (A-Z، a-z، 0-9، +، /) است. این روش معمولاً برای انتقال داده‌های باینری به صورت متنی در پروتکل‌هایی مانند HTTP یا ایمیل استفاده می‌شود.

import base64

data = b'This is some binary data.'
encoded_data = base64.b64encode(data)
print(encoded_data) # Output: b'VGhpcyBpcyBzb21lIGJpbmFyeSBkYXRhLg=='

# Decoding
decoded_data = base64.b64decode(encoded_data)
print(decoded_data) # Output: b'This is some binary data.'


#### مثال 2: URL Encoding

URL encoding (یا percent encoding)
فرایندی است که طی آن کاراکترهای خاص در یک URL به یک فرمت خاص تبدیل می‌شوند که برای انتقال از طریق URL مناسب باشد.

import urllib.parse

data = 'This is a string with spaces and symbols: !@#'
encoded_data = urllib.parse.quote(data)
print(encoded_data) # Output: 'This%20is%20a%20string%20with%20spaces%20and%20symbols%3A%20%21%40%23'

# Decoding
decoded_data = urllib.parse.unquote(encoded_data)
print(decoded_data) # Output: 'This is a string with spaces and symbols: !@#'


#encoding

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥62