📅  最后修改于: 2023-12-03 15:31:30.552000             🧑  作者: Mango
Java I/O 包含了 Java 语言中输入与输出数据处理的相关操作,如文件读写、网络通信、对象序列化等。在日常的编程工作中,I/O 操作是无法避免的,因此深入学习 I/O 操作对于编程人员来说是非常重要的。
Java 中进行文件读写操作一般使用 File
类和 FileReader
,FileWriter
类。下面是一个文件读取的示例代码:
try {
File file = new File("filepath");
FileReader fileReader = new FileReader(file);
int ch;
while ((ch = fileReader.read()) != -1) {
System.out.print((char)ch);
}
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
上述代码中,我们首先创建了一个 File
对象来表示要读取的文件,然后使用 FileReader
类创建一个用于读取该文件的输入流。然后开始循环读取文件中的字符,直到文件结束(-1),最后关闭输入流释放资源。
类似的,我们可以使用 FileWriter
类将数据写入到文件中:
try {
File file = new File("filepath");
FileWriter fileWriter = new FileWriter(file);
fileWriter.write("Hello, World!");
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
在上述代码中,我们同样创建了一个 File
对象来表示要写入的文件,然后使用 FileWriter
类创建一个用于写入该文件的输出流。然后使用 write
方法将待写入的字符串写入到文件中,并最后关闭输出流释放资源。
Java 提供了多个类来进行网络通信,其中就包括了基于 TCP 和 UDP 协议的 Socket 类。下面是一个客户端和服务端进行通信的示例代码:
服务端代码:
try {
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();
DataInputStream in = new DataInputStream(socket.getInputStream());
System.out.println(in.readUTF());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeUTF("Hello, Client!");
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
客户端代码:
try {
Socket socket = new Socket("localhost", 8888);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeUTF("Hello, Server!");
DataInputStream in = new DataInputStream(socket.getInputStream());
System.out.println(in.readUTF());
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
在服务端代码中,我们首先创建了一个 ServerSocket
对象来监听端口 8888,并等待客户端连接。当客户端连接成功后,我们创建了一个 DataInputStream
对象来接收来自客户端的消息,并使用 DataOutputStream
对象向客户端发送一条消息。在客户端代码中,我们首先创建了一个 Socket
对象来连接服务端指定的 IP 地址和端口号,然后使用 DataOutputStream
对象向服务端发送一条消息,并使用 DataInputStream
对象接收来自服务端的消息。
Java 中的对象序列化可以将一个 Java 对象转换成二进制数据流,并保存到文件或者通过网络传输到另一个计算机。反序列化则可以将这些二进制数据重新转换成原来的 Java 对象。下面是一个对象序列化的示例代码:
try {
//将对象序列化
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.dat"));
Person person = new Person("张三", 20);
out.writeObject(person);
out.close();
//将对象反序列化
ObjectInputStream in = new ObjectInputStream(new FileInputStream("person.dat"));
Person p = (Person) in.readObject();
System.out.println(p.getName() + "," + p.getAge());
in.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
在上述代码中,我们首先创建了一个 Person
对象,然后使用 ObjectOutputStream
将其序列化并保存到文件中。接着使用 ObjectInputStream
从文件中读取并反序列化成一个新的 Person
对象。最后我们打印这个新的 Person
对象的信息,验证其正确性。
Java I/O 是 Java 语言的一个重要组成部分。无论是进行文件操作、网络通信、还是对象序列化等,都会涉及到 I/O 操作。在学习和应用 I/O 相关操作时,务必注意处理 I/O 异常和资源释放的问题,以保证程序的正确性和安全性。