tek4

Lớp ObjectOutputStream trong Java

by - September. 26, 2021
Kiến thức
Học
Công nghệ
<p>Trong b&agrave;i viết n&agrave;y, ch&uacute;ng ta sẽ t&igrave;m hiểu về lớp ObjectOutputStream trong Java v&agrave; c&aacute;c phương thức của n&oacute; c&ugrave;ng với c&aacute;c v&iacute; dụ.</p> <p>Lớp ObjectOutputStream của g&oacute;i java.io c&oacute; thể được sử dụng để ghi c&aacute;c đối tượng c&oacute; thể được đọc bởi ObjectInputStream. N&oacute; kế thừa lớp trừu tượng OutputStream.</p> <h2>C&aacute;ch hoạt động của ObjectOutputStream</h2> <p>Về cơ bản, ObjectOutputStream m&atilde; h&oacute;a c&aacute;c đối tượng Java bằng c&aacute;ch sử dụng t&ecirc;n lớp v&agrave; c&aacute;c gi&aacute; trị đối tượng. V&agrave; tạo ra c&aacute;c luồng tương ứng. Qu&aacute; tr&igrave;nh n&agrave;y được gọi l&agrave; qu&aacute; tr&igrave;nh chuyển đổi Serialization. C&aacute;c luồng được chuyển đổi đ&oacute; c&oacute; thể được lưu trữ trong c&aacute;c tệp v&agrave; c&oacute; thể được chuyển giữa c&aacute;c mạng.</p> <p><strong>Ch&uacute; &yacute;: Lớp ObjectOutputStream chỉ ghi những đối tượng triển khai Serializable Interface. Điều n&agrave;y l&agrave; do c&aacute;c đối tượng cần được chuyển đổi trong khi ghi v&agrave;o luồng.</strong></p> <h2>Tạo một ObjectOutputStream</h2> <p>Để tạo ObjectOutputStream, trước ti&ecirc;n ch&uacute;ng ta phải th&ecirc;m g&oacute;i package java.io.ObjectOutputStream. Sau khi th&ecirc;m, sau đ&acirc;y l&agrave; c&aacute;ch ch&uacute;ng ta c&oacute; thể tạo cho luồng đầu ra.</p> <pre class="language-java"><code>FileOutputStream file = new FileOutputStream(String path); ObjectOutputStream obj = new ObjectOutputStream(file);</code></pre> <p>Trong v&iacute; dụ tr&ecirc;n, ch&uacute;ng ta đ&atilde; tạo một PrintStream đầu ra đối tượng c&oacute; t&ecirc;n l&agrave; obj được li&ecirc;n kết với luồng đầu ra cho tệp c&oacute; t&ecirc;n l&agrave; file.</p> <h2>C&aacute;c phương thức của ObjectOutputStream</h2> <p>Lớp ObjectOutputStream cung cấp c&aacute;c triển khai cho c&aacute;c phương thức kh&aacute;c nhau c&oacute; trong lớp OutputStream.</p> <h3>Phương thức write()</h3> <ul> <li>Phương thức write(): Ghi một byte dữ liệu v&agrave;o luồng đầu ra.</li> <li>Phương thức writeBoolean(): Ghi dữ liệu ở dạng boolean.</li> <li>Phương thức writeChar(): Ghi dữ liệu ở dạng k&yacute; tự.</li> <li>Phương thức writeInt(): Ghi dữ liệu ở dạng số nguy&ecirc;n.</li> <li>Phương thức writeObject(): Ghi đối tượng v&agrave;o luồng đầu ra.</li> </ul> <p>V&iacute; dụ:</p> <pre class="language-java"><code>import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; class Main { public static void main(String[] args) { int du_lieu1 = 15; String du_lieu2 = "Lap trinh Java"; try { FileOutputStream file = new FileOutputStream("tek4.txt"); ObjectOutputStream obj = new ObjectOutputStream(file); obj.writeInt(du_lieu1); obj.writeObject(du_lieu2); FileInputStream file2 = new FileInputStream("tek4.txt"); ObjectInputStream obj2 = new ObjectInputStream(file2); System.out.println(obj2.readInt()); System.out.println(obj2.readObject()); obj.close(); obj2.close(); } catch (Exception e) { e.getStackTrace(); } } }</code></pre> <p>Kết quả:</p> <pre class="language-markup"><code>15 Lap trinh Java</code></pre> <p>Trong v&iacute; dụ tr&ecirc;n, ch&uacute;ng ta đ&atilde; sử dụng phương thức readInt() v&agrave; phương thức readObject() để đọc dữ liệu số nguy&ecirc;n v&agrave; dữ liệu đối tượng từ c&aacute;c tệp. Ở đ&acirc;y, ch&uacute;ng ta đ&atilde; sử dụng ObjectOutputStream để ghi dữ liệu v&agrave;o tệp. Sau đ&oacute;, ch&uacute;ng ta đọc dữ liệu từ tệp bằng ObjectInputStream.</p> <p>V&iacute; dụ 2:</p> <pre class="language-java"><code>import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class sinh_vien implements Serializable { String ten; public sinh_vien(String a) { this.ten = a; } } class Main { public static void main(String[] args) { sinh_vien sv = new sinh_vien("Nguyen A"); try { FileOutputStream file = new FileOutputStream("tek4.txt"); ObjectOutputStream output = new ObjectOutputStream(file); output.writeObject(sv); FileInputStream file2 = new FileInputStream("tek4.txt"); ObjectInputStream input = new ObjectInputStream(file2); sinh_vien sv2 = (sinh_vien) input.readObject(); System.out.println("Ten sinh vien la: " + sv2.ten); output.close(); input.close(); } catch (Exception e) { e.getStackTrace(); } } }</code></pre> <p>Kết quả:</p> <pre class="language-markup"><code>Ten sinh vien la: Nguyen A</code></pre> <p>Ở đ&acirc;y, ch&uacute;ng ta đ&atilde; sử dụng PrintStream đầu ra cho đối tượng để ghi đối tượng v&agrave;o tệp. V&agrave;, luồng đầu v&agrave;o đối tượng để đọc đối tượng từ tệp.</p> <p><strong>Ch&uacute; &yacute;: Lớp sinh_vien triển khai cho Serializable Interface. Đ&oacute; l&agrave; bởi v&igrave; ObjectOutputStream chỉ ghi c&aacute;c đối tượng c&oacute; thể được chuyển đổi Serialization v&agrave;o PrintStream đầu ra.</strong></p> <h3>C&aacute;c phương thức kh&aacute;c</h3> <table width="787"> <tbody> <tr> <td style="text-align: center;">Phương thức</td> <td style="text-align: center;">M&ocirc; tả</td> </tr> <tr> <td>flush()</td> <td>X&oacute;a bỏ tất cả dữ liệu từ PrintStream đầu ra.</td> </tr> <tr> <td>drain()</td> <td>Đẩy tất cả dữ liệu lưu trữ tạm thời v&agrave;o trong luồng đầu ra.</td> </tr> <tr> <td>close()</td> <td>Đ&oacute;ng PrintStream đầu ra.</td> </tr> </tbody> </table> <p>Tr&ecirc;n đ&acirc;y l&agrave; kh&aacute;i niệm v&agrave; v&iacute; dụ cơ bản về lớp ObjectOutputStream trong Java. Hy vọng mọi người c&oacute; thể &aacute;p dụng v&agrave;o trong chương tr&igrave;nh của m&igrave;nh. Mọi người h&atilde;y tiếp tục theo d&otilde;i c&aacute;c b&agrave;i tiếp theo v&agrave; cập nhật c&aacute;c b&agrave;i mới nhất tr&ecirc;n <a href="http://tek4.vn">tek4</a> nh&eacute;!</p>