Java常用数据流应用实例解析
Java中的数据流用于操作输入和输出流,读取和写入数据。Java提供了多个数据流类来完成各种数据读写操作。本文将详细讲解Java常用数据流的使用方法并给出两个实例说明。
常用数据流
Java的常用数据流包括InputStream、OutputStream、Reader和Writer等,这些类都有其各自的子类。我们将分别介绍这些类的使用方法。
InputStream
InputStream是字节输入流,由多个子类实现,如FileInputStream、ByteArrayInputStream、PipedInputStream等。常用方法如下:
read()
方法:读取输入流中的下一个字节,返回-1表示已经读取完毕。available()
方法:返回输入流中可读取的字节数量。skip(long n)
方法:跳过输入流中的n个字节不读取。close()
方法:关闭输入流。
下面是一个从文件中读取数据的示例代码:
try (InputStream input = new FileInputStream("file.txt")) {
int data;
while ((data = input.read()) != -1) {
// 处理读取到的数据
}
} catch (IOException e) {
// 处理异常
}
OutputStream
OutputStream是字节输出流,同样有多个子类实现,如FileOutputStream、ByteArrayOutputStream、PipedOutputStream等。常用方法如下:
write(int b)
方法:写入字节流。flush()
方法:清空输出缓冲区,将数据强制输出到目标设备。close()
方法:关闭输出流。
下面是一个将数据写入到文件中的示例代码:
try (OutputStream output = new FileOutputStream("file.txt")) {
byte[] data = "Hello, world!".getBytes();
output.write(data);
} catch (IOException e) {
// 处理异常
}
Reader
Reader是字符输入流,同样由多个子类实现,如FileReader、CharArrayReader、StringReader等。常用方法如下:
read()
方法:读取字符流中的下一个字符,返回-1表示已经读取完毕。read(char[] cbuf, int off, int len)
方法:读取指定长度的字符到缓冲区中。skip(long n)
方法:跳过字符流中的n个字符不读取。close()
方法:关闭字符输入流。
下面是一个从文件中读取数据并输出到控制台的示例代码:
try (Reader reader = new FileReader("file.txt")) {
char[] buffer = new char[1024];
int len;
while ((len = reader.read(buffer)) != -1) {
System.out.print(new String(buffer, 0, len));
}
} catch (IOException e) {
// 处理异常
}
Writer
Writer是字符输出流,同样由多个子类实现,如FileWriter、CharArrayWriter、StringWriter等。常用方法如下:
write(char[] cbuf, int off, int len)
方法:写入指定长度的字符。flush()
方法:清空输出缓冲区,将数据强制输出到目标设备。close()
方法:关闭字符输出流。
下面是一个将数据写入到文件中的示例代码:
try (Writer writer = new FileWriter("file.txt")) {
char[] data = "Hello, world!".toCharArray();
writer.write(data);
} catch (IOException e) {
// 处理异常
}
示例说明
示例一:读取网络资源
我们可以通过Java的URL类来读取网络资源,如下所示:
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(
new URL("https://www.baidu.com").openStream()))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
// 处理异常
}
首先使用URL类创建一个URL对象,然后调用其openStream()方法打开与该URL资源的连接获取输入流。接着将输入流包装为字符输入流,再利用BufferedReader类来降低每次读取数据的次数,最后读取数据并输出到控制台。
示例二:序列化对象
Java的ObjectInputStream和ObjectOutputStream类可以实现对象的序列化和反序列化。序列化是将对象转换为二进制流,以便在网络上传输或保存到本地磁盘中,而反序列化则是将对象从二进制流中还原出来。示例代码如下:
class Person implements Serializable {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
try (ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream("person.dat"))) {
Person p = new Person("张三", 28);
out.writeObject(p);
} catch (IOException e) {
// 处理异常
}
try (ObjectInputStream in = new ObjectInputStream(
new FileInputStream("person.dat"))) {
Person p = (Person) in.readObject();
System.out.println(p.name + ", " + p.age);
} catch (IOException | ClassNotFoundException e) {
// 处理异常
}
}
}
首先定义一个Person类并实现Serializable接口,然后利用ObjectOutputStream类将Person对象写入到文件person.dat中。接着利用ObjectInputStream类读取文件person.dat中的数据并反序列化为Person对象,最后输出Person对象的姓名和年龄。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java常用数据流应用实例解析 - Python技术站