标题:Java中的IO(Input与Output)操作总结(三)
概述
在Java中,IO是一项重要的操作。在前两篇文章中,我们讲解了Java中的Input与Output操作。本文将为大家介绍Java中的文件操作、Socket网络编程以及序列化操作。
文件操作
Java中,我们通过File类实现文件操作。首先,我们需要使用构造函数创建一个File对象,进而对文件进行操作。比如,我们要读取文件的内容,可以使用FileInputStream类读取文件输入流。具体的实现代码如下所示:
File file = new File("example.txt");
FileInputStream fis = new FileInputStream(file);
int content;
while ((content = fis.read()) != -1) {
System.out.print((char) content);
}
fis.close();
上述示例中,首先创建了一个File对象file,指向了想要读取的文件example.txt。接着,使用FileInputStream类创建文件输入流fis,并且使用fis.read()
方法逐个读取文件内容,在读取的时候如果返回值为-1,则说明文件已经读取结束,此时需要关闭流。
同样的,在Java中,我们也可以通过FileOutputStream类向文件中写入内容。以下是一个示例代码:
File file = new File("example.txt");
FileOutputStream fos = new FileOutputStream(file);
String content = "hello world";
byte[] bytes = content.getBytes();
fos.write(bytes);
fos.close();
上述示例中,同样创建了一个File对象file,指向了想要写入内容的文件example.txt。然后使用FileOutputStream类创建文件输出流fos,使用fos.write(bytes)
方法向文件中写入字节数组bytes。
当然,这只是文件操作的冰山一角,我们还可以进行文件的重命名、删除、创建、获取文件名、获取文件大小等操作。若要了解更多内容,可以查阅File类的官方文档。
Socket网络编程
Java中的Socket网络编程是一项重要的技术,它允许不同的程序在不同的机器之间进行通信。在Java中,我们可以使用同步的阻塞方式或者异步的非阻塞方式在Socket编程中进行数据传输。
以下是一个简单的Socket编程示例,用于在服务器端监听请求,并返回响应:
Server端代码:
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("Starting server...");
while (true) {
Socket client = serverSocket.accept();
System.out.println("Client connected...");
OutputStreamWriter os = new OutputStreamWriter(client.getOutputStream());
BufferedWriter out = new BufferedWriter(os);
out.write("Hello client! \n");
out.flush();
client.close();
}
Client端代码:
Socket client = new Socket("localhost", 8888);
System.out.println("Client started...");
InputStreamReader isr = new InputStreamReader(client.getInputStream());
BufferedReader in = new BufferedReader(isr);
String response = in.readLine();
System.out.println(response);
client.close();
上述示例中,Server端使用ServerSocket类创建服务端Socket,监听指定8080端口的请求,一旦有客户端连接,则向客户端发送信息。Client端使用Socket类连接到指定端口,接收服务端的响应信息。
当然,Socket的使用还可以进行数据类型的传输、文件的传输、线程的并发编程等高级操作,如果有兴趣可以查看Java网络编程相关的文档。
序列化操作
Java中,我们可以使用序列化技术将一个Java对象转换成字节,也可以通过反序列化技术将一个字节流转换成Java对象。以下是一个简单的序列化示例:
public class Dog implements Serializable {
private static final long serialVersionUID = -7049957702495547767L;
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
Dog dog = new Dog("Tom", 3);
FileOutputStream fos = new FileOutputStream("dog.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(dog);
oos.flush();
oos.close();
FileInputStream fis = new FileInputStream("dog.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Dog dog1 = (Dog) ois.readObject();
System.out.println(dog1.getName() + " " + dog1.getAge());
ois.close();
上述示例中,我们创建了一个Dog类,并实现了Serializable接口。然后,创建一个Dog对象dog,并使用ObjectOutputStream将其序列化写入文件dog.txt中。接着,使用ObjectInputStream从文件中读取dog对象,并反序列化成新的Dog对象dog1。
在Java中,序列化操作还可以进行规则的控制、子类的序列化、序列化ID的控制等操作,具体的内容可以查看Java序列化相关的文档。
3个部分分别介绍了Java中的文件操作、Socket网络编程以及序列化操作。当然,上述示例只是简单的示范。想要进行更为复杂的操作,还需要更深入的了解Java中的IO操作,如果有兴趣可以继续深入学习。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java中的Io(input与output)操作总结(三) - Python技术站