博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。
以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】
关注【架构师成长之道】 输入“架构师视频课程”,即可免费获得全套架构师全套课程
一、java.io
1.47 ObjectOutput
ObjectOutput
接口用于向流中写入对象数据。它是序列化对象的起点,允许将对象写入到输出流中。
ObjectOutput 接口介绍:
所有字段:
没有字段,因为它是一个接口。
构造方法:
没有构造方法,因为它是一个接口。
方法摘要:
void writeObject(Object obj) throws IOException
:将指定的对象写入流中。
简单使用例子:
以下是一个简单的例子,演示了如何使用 ObjectOutput
接口将对象写入输出流中:
javaCopy code import java.io.*; public class ObjectOutputExample { public static void main(String[] args) { String fileName = "object.dat"; try (OutputStream fileOutputStream = new FileOutputStream(fileName); ObjectOutput objectOutput = new ObjectOutputStream(fileOutputStream)) { // 写入对象到输出流中 MyObject obj = new MyObject("Hello, world!"); objectOutput.writeObject(obj); System.out.println("Object has been written to file successfully."); } catch (IOException e) { e.printStackTrace(); } } } class MyObject implements Serializable { private static final long serialVersionUID = 1L; private String data; public MyObject(String data) { this.data = data; } @Override public String toString() { return "MyObject{" + "data='" + data + '\'' + '}'; } }
在上面的例子中,我们首先创建了一个 MyObject
类,该类实现了 Serializable
接口。然后,我们使用 ObjectOutputStream
将 MyObject
对象写入到名为 "object.dat" 的文件中。通过调用 writeObject()
方法,我们将对象写入到输出流中。
应用场景
下面列出了使用 ObjectOutput
接口的一些常见应用场景以及相应的代码实现:
应用场景 1: 将对象写入文件
javaCopy code import java.io.*; public class WriteObjectToFile { public static void main(String[] args) { String fileName = "data.ser"; try (OutputStream fileOutputStream = new FileOutputStream(fileName); ObjectOutput objectOutput = new ObjectOutputStream(fileOutputStream)) { // 创建并写入对象到文件 MyObject obj = new MyObject("Hello, world!"); objectOutput.writeObject(obj); System.out.println("Object has been written to file successfully."); } catch (IOException e) { e.printStackTrace(); } } } class MyObject implements Serializable { private static final long serialVersionUID = 1L; private String data; public MyObject(String data) { this.data = data; } @Override public String toString() { return "MyObject{" + "data='" + data + '\'' + '}'; } }
应用场景 2: 将对象写入网络流
javaCopy code import java.io.*; import java.net.*; public class WriteObjectToNetwork { public static void main(String[] args) { try (Socket socket = new Socket("localhost", 12345); OutputStream outputStream = socket.getOutputStream(); ObjectOutput objectOutput = new ObjectOutputStream(outputStream)) { // 创建并写入对象到网络流 MyObject obj = new MyObject("Hello, world!"); objectOutput.writeObject(obj); System.out.println("Object has been written to network stream successfully."); } catch (IOException e) { e.printStackTrace(); } } }
应用场景 3: 将对象写入数据库 Blob 字段
javaCopy code import java.io.*; import java.sql.*; public class WriteObjectToDatabase { public static void main(String[] args) { try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password"); PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO MyTable (object_data) VALUES (?)")) { // 创建对象并将其写入到字节数组输出流 MyObject obj = new MyObject("Hello, world!"); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try (ObjectOutput objectOutput = new ObjectOutputStream(byteArrayOutputStream)) { objectOutput.writeObject(obj); } // 将对象数据写入到数据库 Blob 字段 preparedStatement.setBytes(1, byteArrayOutputStream.toByteArray()); preparedStatement.executeUpdate(); System.out.println("Object has been written to database successfully."); } catch (SQLException | IOException e) { e.printStackTrace(); } } }
这些是使用 ObjectOutput
接口的一些常见应用场景,包括将对象写入文件、网络流和数据库 Blob 字段中。
实战例子
以下是一个项目实战例子,演示了如何使用 ObjectOutput
接口将对象写入文件并从文件中读取:
javaCopy code import java.io.*; public class ObjectSerializationExample { static class User implements Serializable { private static final long serialVersionUID = 1L; 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 static void main(String[] args) { String fileName = "user.ser"; // 写入对象到文件 writeObjectToFile(fileName); // 从文件读取对象并处理 readObjectFromFile(fileName); } private static void writeObjectToFile(String fileName) { try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(fileName))) { User user = new User("john.doe", "password123"); outputStream.writeObject(user); System.out.println("Object written to file successfully."); } catch (IOException e) { e.printStackTrace(); } } private static void readObjectFromFile(String fileName) { try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(fileName))) { Object obj = inputStream.readObject(); if (obj instanceof User) { User user = (User) obj; System.out.println("Object read from file: " + user); } } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
在这个例子中,我们定义了一个 User
类,该类实现了 Serializable
接口。我们创建了一个 User
对象并将其写入到文件中,然后再从文件中读取该对象。通过使用 ObjectOutputStream
和 ObjectInputStream
类,我们可以很容易地将对象写入文件并从文件中读取对象。