tek4

Lớp ObjectInputStream trong Java

by - September. 25, 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ẽ c&ugrave;ng t&igrave;m hiểu về lớp ObjectInputStream 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 ObjectInputStream của g&oacute;i java.io c&oacute; thể được sử dụng để đọc c&aacute;c đối tượng đ&atilde; được ghi ra trước đ&oacute; bởi ObjectOutputStream. N&oacute; kế thừa lớp trừu tượng InputStream.</p> <h2>Luồng hoạt động của ObjectInputStream</h2> <p>ObjectInputStream chủ yếu được sử dụng để đọc dữ liệu được ghi bởi ObjectOutputStream. Về cơ bản, ObjectOutputStream chuyển đổi c&aacute;c đối tượng Java th&agrave;nh c&aacute;c luồng tương ứng. Đ&acirc;y được gọi l&agrave; qu&aacute; tr&igrave;nh chuyển đổi serialization. C&aacute;c luồng chuyển đổi đ&oacute; c&oacute; thể được lưu trữ trong c&aacute;c tệp hoặc chuyển qua mạng.</p> <p>Nếu ch&uacute;ng ta cần đọc c&aacute;c đối tượng, ch&uacute;ng ta sẽ sử dụng ObjectInputStream để chuyển đổi c&aacute;c luồng trở lại c&aacute;c đối tượng tương ứng, được gọi l&agrave; qu&aacute; tr&igrave;nh chuyển đổi ngược deserialization.</p> <h2>Tạo một ObjectInputStream</h2> <p>Để tạo luồng nhập đối tượng, trước ti&ecirc;n ch&uacute;ng ta phải th&ecirc;m g&oacute;i package java.io.ObjectInputStream. Sau khi th&ecirc;m, sau đ&acirc;y l&agrave; c&aacute;ch ch&uacute;ng ta c&oacute; thể tạo luồng đầu v&agrave;o.</p> <pre class="language-java"><code>FileInputStream file = new FileInputStream(String path); ObjectInputStream obj = new ObjectInputStream(file);</code></pre> <p>Trong v&iacute; dụ tr&ecirc;n, ch&uacute;ng ta đ&atilde; tạo một luồng nhập đối tượng c&oacute; t&ecirc;n l&agrave; obj được li&ecirc;n kết với luồng nhập file c&oacute; t&ecirc;n l&agrave; file. B&acirc;y giờ, obj c&oacute; thể được sử dụng để đọc c&aacute;c đối tượng từ tệp với đường dẫn tới tệp l&agrave; path.</p> <h2>C&aacute;c phương thức của ObjectInputStream</h2> <p>Lớp ObjectInputStream cung cấp việc triển khai c&aacute;c phương thức kh&aacute;c nhau c&oacute; trong lớp InputStream.</p> <h3>Phương thức read()</h3> <ul> <li>Phương thức read(): Đọc một byte dữ liệu từ luồng đầu v&agrave;o.</li> <li>Phương thức readBoolean(): Đọc dữ liệu ở dạng boolean.</li> <li>Phương thức readChar(): Đọc dữ liệu ở dạng k&yacute; tự.</li> <li>Phương thức readInt(): Đọc dữ liệu ở dạng số nguy&ecirc;n.</li> <li>Phương thức readObject(): Đọc đối tượng từ luồng đầu v&agrave;o.</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 = 14; 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>14 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; readObject() để đọc dữ liệu số nguy&ecirc;n v&agrave; dữ liệu đối tượng từ 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ụ:</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 đối tượng để ghi đối tượng v&agrave;o tệp. V&agrave; luồng nhập đầ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 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 th&agrave;nh 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>available()</td> <td>Kiểm tra số lượng byte hiện c&oacute; trong luồng đầu v&agrave;o.</td> </tr> <tr> <td>mark()</td> <td>Đ&aacute;nh dấu vị tr&iacute; trong luồng nhập đầu v&agrave;o m&agrave; dữ liệu sẽ được đọc tới điểm đ&oacute;.</td> </tr> <tr> <td>reset()</td> <td>Trả về control tại điểm trong luồng nhập đầu v&agrave;o m&agrave; đ&atilde; được đ&aacute;nh dấu.</td> </tr> <tr> <td>skipBytes()</td> <td>Loại bỏ c&aacute;c byte được x&aacute;c định trong luồng nhập đầu v&agrave;o.</td> </tr> <tr> <td>close()</td> <td>Đ&oacute;ng luồng nhập đầu v&agrave;o đối tượng.</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 ObjectInputStream 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>