🎓لیست دوره های جاواپرو:
💎 دوره پرتاب | آموزش پیش نیازهای برنامه نویسی
💎 دوره مقدماتی جاوا
💎 دوره شاهکار پیشرفته جاوا
💎 دوره طلایی Spring Core
💎 دوره فریمورک Spring Boot
💎 دوره پروژه محور Spring Boot-سیستم دانشگاه
💎 دوره دژبان Spring Security
⚡️ دوره جامع نخبگان میکروسرویس با Java و Spring Boot
🚀 جایگاه فردایت، نتیجهی تصمیم امروزت است
☎️ پشتیبانی و راهنمای ثبت نام دوره ها 👇
☎️ @rzutab
➡️ اشتراک 👍 لایک 💬 کامنت
➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖
⚡️ @javapro_ir
✈️ @group_javapro
➖ ➖ ➖ ➖ ➖ ➖ ➖ ➖
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 آموزش Serialization در جاوا
🔹 در واقع Serialization فرایندی است که در آن یک شیء (Object) به یک جریان بایت (Byte Stream) تبدیل میشود تا بتوان آن را:
* در یک فایل ذخیره کرد 🗂️
* از طریق شبکه ارسال کرد 🌐
🔹و Deserialization عکس این فرایند است؛ یعنی تبدیل جریان بایت به شیء.
✅ پیادهسازی Serialization
برای Serializable کردن یک کلاس، کافیست کلاس را از `Serializable` پیادهسازی کنیم:
🔎 نکات مهم:
1. برای Serialization نیازی به تعریف متد خاصی نداریم، فقط باید کلاس `implements Serializable` باشد.
2. اگر بخواهیم یک فیلد ذخیره نشود، از `transient` استفاده میکنیم.
3. فایل خروجی معمولا پسوند
💡 کاربرد واقعی:
* ذخیره وضعیت یک برنامه (مثلا Session)
* ارسال اشیاء بین کلاینت و سرور در شبکه
🔹 در واقع Serialization فرایندی است که در آن یک شیء (Object) به یک جریان بایت (Byte Stream) تبدیل میشود تا بتوان آن را:
* در یک فایل ذخیره کرد 🗂️
* از طریق شبکه ارسال کرد 🌐
🔹و Deserialization عکس این فرایند است؛ یعنی تبدیل جریان بایت به شیء.
✅ پیادهسازی Serialization
برای Serializable کردن یک کلاس، کافیست کلاس را از `Serializable` پیادهسازی کنیم:
import java.io.*;
// کلاس مدل دانشجو
class Student implements Serializable {
private String name;
private int age;
// سازنده
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// متد برای چاپ اطلاعات
public void display() {
System.out.println("Name: " + name + ", Age: " + age);
}
}
public class Main {
public static void main(String[] args) {
// شیء برای ذخیره
Student s1 = new Student("Ali", 22);
// ✅ Serialization: ذخیره در فایل
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("student.ser"))) {
out.writeObject(s1);
System.out.println("✅ Object serialized successfully!");
} catch (IOException e) {
e.printStackTrace();
}
// ✅ Deserialization: خواندن از فایل
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("student.ser"))) {
Student s2 = (Student) in.readObject();
System.out.println("✅ Object deserialized successfully!");
s2.display();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
🔎 نکات مهم:
1. برای Serialization نیازی به تعریف متد خاصی نداریم، فقط باید کلاس `implements Serializable` باشد.
2. اگر بخواهیم یک فیلد ذخیره نشود، از `transient` استفاده میکنیم.
3. فایل خروجی معمولا پسوند
.ser
دارد، ولی اجباری نیست.💡 کاربرد واقعی:
* ذخیره وضعیت یک برنامه (مثلا Session)
* ارسال اشیاء بین کلاینت و سرور در شبکه
#کاربرـحرفهـای
🆔 @javapro_ir
🆔 @group_javapro
👍7❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
ماندگاری دادهها در جاوا طی سالها مسیر طولانی و پیشرفتهای را طی کرده است. از نوشتن کوئریهای خام SQL با استفاده از JDBC گرفته تا بهرهبردن از فریمورکهای ORM مدرن، هر مرحله باعث سادهتر شدن تعامل با پایگاه داده و افزایش بهرهوری توسعهدهندگان شده است.
🔹 ۱۹۹۹ – JDBC
اتصال مستقیم به پایگاه داده با استفاده از یک API سطح پایین. قدرتمند بود، اما نیاز به کدنویسی تکراری و طولانی داشت.
🔹 ۲۰۰۲ – مفهوم ORM
معرفی نگاشت شیء-رابطه (Object-Relational Mapping) برای نگاشت اشیای جاوا به جداول پایگاه داده.
🔹 ۲۰۰۴ – Hibernate
یک تحول بزرگ! Hibernate به پرکاربردترین ابزار ORM تبدیل شد و پیچیدگیهای JDBC را درونیسازی کرد.
🔹 ۲۰۰۶ – JPA (Java Persistence API)
استانداردسازی ORM در قالب یک مشخصه رسمی. سازگاری و یکنواختی ایجاد کرد، اما نیازمند پیادهسازی مانند Hibernate بود.
🔹 ۲۰۱۲ – Spring JDBC
فریمورک Spring کار با JDBC را سادهتر کرد و حجم کدهای تکراری را کاهش داد.
🔹 امروز – Hibernate همراه با JPA
روش متداول فعلی، استفاده از Hibernate بهعنوان پیادهسازی JPA است که ترکیبی از استاندارد و قدرت را ارائه میدهد.
✨ مسیر تحول:
از کدنویسی دستی و پر از SQL ➝ تا ماندگاری داده بهصورت شیءگرا ➝ تا رسیدن به فریمورکهای آماده برای مقیاسپذیری سازمانی.
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🚀 Serialization پیشرفته در جاوا
وقتی شیءهامون رو Serialize میکنیم، بعضی وقتا نیاز داریم که همهی فیلدها ذخیره نشن یا در آینده نسخههای مختلفی از کلاس سازگار بمونن. اینجاست که دو ابزار مهم به کار میان:
1️⃣ کلیدواژه transient
* اگر بخوایم بعضی فیلدها در فرآیند Serialization ذخیره نشن، اونها رو با transient علامتگذاری میکنیم.
* مثال: فرض کن یک فیلد رمز عبور داری و نمیخوای داخل فایل ذخیره بشه.
نتیجه: فیلد password ذخیره نمیشود و مقدارش بعد از بازیابی null خواهد بود.
2️⃣ مفهوم serialVersionUID
* وقتی کلاسی رو Serialize میکنی، جاوا به طور خودکار یک نسخه (Version ID) براش تولید میکنه.
* مشکل اینه که اگر بعداً کلاست تغییر کنه (مثلاً یک فیلد جدید اضافه بشه)، ID جدید تولید میشه و فایلهای Serialize شدهی قدیمی دیگه سازگار نیستن ❌.
* برای حل این مشکل باید به صورت دستی یک serialVersionUID ثابت تعریف کنیم:
* حالا حتی اگر فیلد جدیدی به کلاس اضافه کنیم، فایلهای قدیمی همچنان میتونن Deserialize بشن (البته فیلد جدید مقدار پیشفرض میگیره).
✅ جمعبندی
* transient:
جلوی ذخیره شدن بعضی فیلدها رو میگیره (مثل رمز عبور یا دادههای حساس).
* serialVersionUID:
برای سازگاری نسخهها استفاده میشه تا فایلهای قدیمی هم قابل خواندن بمونن.
وقتی شیءهامون رو Serialize میکنیم، بعضی وقتا نیاز داریم که همهی فیلدها ذخیره نشن یا در آینده نسخههای مختلفی از کلاس سازگار بمونن. اینجاست که دو ابزار مهم به کار میان:
1️⃣ کلیدواژه transient
* اگر بخوایم بعضی فیلدها در فرآیند Serialization ذخیره نشن، اونها رو با transient علامتگذاری میکنیم.
* مثال: فرض کن یک فیلد رمز عبور داری و نمیخوای داخل فایل ذخیره بشه.
import java.io.*;
class User implements Serializable {
private String username;
private transient String password; // ذخیره نمیشود 🚫
public User(String username, String password) {
this.username = username;
this.password = password;
}
@Override
public String toString() {
return "User{username='" + username + "', password='" + password + "'}";
}
}
public class Main {
public static void main(String[] args) throws Exception {
User user = new User("Saleh", "12345");
// Serialize
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("user.ser"));
oos.writeObject(user);
oos.close();
// Deserialize
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.ser"));
User deserializedUser = (User) ois.readObject();
ois.close();
System.out.println("بعد از Deserialize:");
System.out.println(deserializedUser);
// password = null چون transient بوده
}
}
نتیجه: فیلد password ذخیره نمیشود و مقدارش بعد از بازیابی null خواهد بود.
2️⃣ مفهوم serialVersionUID
* وقتی کلاسی رو Serialize میکنی، جاوا به طور خودکار یک نسخه (Version ID) براش تولید میکنه.
* مشکل اینه که اگر بعداً کلاست تغییر کنه (مثلاً یک فیلد جدید اضافه بشه)، ID جدید تولید میشه و فایلهای Serialize شدهی قدیمی دیگه سازگار نیستن ❌.
* برای حل این مشکل باید به صورت دستی یک serialVersionUID ثابت تعریف کنیم:
import java.io.*;
class Person implements Serializable {
private static final long serialVersionUID = 1L; // ثابت ✅
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
* حالا حتی اگر فیلد جدیدی به کلاس اضافه کنیم، فایلهای قدیمی همچنان میتونن Deserialize بشن (البته فیلد جدید مقدار پیشفرض میگیره).
✅ جمعبندی
* transient:
جلوی ذخیره شدن بعضی فیلدها رو میگیره (مثل رمز عبور یا دادههای حساس).
* serialVersionUID:
برای سازگاری نسخهها استفاده میشه تا فایلهای قدیمی هم قابل خواندن بمونن.
#کاربرـحرفهـای
🆔 @javapro_ir
🆔 @group_javapro
👍4