常用io类有那些 ,字节流与字符流的区别 ,字节流和字符流如何转换 ,多路复用IO模型
时间: 2023-04-01 12:04:02 浏览: 81
常用的io类有FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream、FileReader、FileWriter、BufferedReader、BufferedWriter等。字节流和字符流的区别在于字节流是以字节为单位读写数据,而字符流是以字符为单位读写数据。字节流和字符流可以通过InputStreamReader和OutputStreamWriter进行转换。多路复用IO模型是指通过一个线程来处理多个IO操作,常见的有select、poll、epoll等。
相关问题
IO流有哪些,字节流和字符流的设计模式
IO流分为字节流和字符流两种。
1. 字节流:以字节为单位进行输入输出,适用于处理二进制数据或字节流,如文件、图片、音频等。常见的字节流有InputStream和OutputStream。
2. 字符流:以字符为单位进行输入输出,适用于处理文本数据,如文本文件、HTML文件等。常见的字符流有Reader和Writer。
设计模式:
1. 装饰器模式:在字节流和字符流中都有应用,用于在不改变原有类的情况下增强其功能。
2. 适配器模式:用于将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类能够协同工作。在Java中,InputStreamReader和OutputStreamWriter就是适配器模式的实例。
3. 工厂模式:用于封装对象的创建过程,使得客户端不再需要知道具体的实现细节。在字节流和字符流中,FileInputStream和FileReader都是通过工厂方法来创建的。
4. 观察者模式:用于在对象之间建立一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。在IO流中,InputStream和Reader都实现了该模式,当输入流中有新的数据时,就会通知所有的观察者。
Java 字节流与字符流的区别与代码示例
Java字节流与字符流的区别:
字节流处理的是字节数据,字符流处理的是字符数据。在Java中,一个字符占两个字节,因此字符流在处理时会自动进行编码转换。
字节流可以处理所有类型的数据,包括文本、图像、视频等,而字符流只能处理文本数据。
字节流通常用于处理二进制文件,如图片、音频、视频等,字符流通常用于处理文本文件。
代码示例:
字节流示例:
```java
import java.io.*;
public class ByteStreamDemo {
public static void main(String[] args) {
try {
File file = new File("test.txt");
FileOutputStream fos = new FileOutputStream(file);
String s = "Hello, world!";
byte[] bytes = s.getBytes();
fos.write(bytes);
fos.close();
FileInputStream fis = new FileInputStream(file);
byte[] bytes1 = new byte[(int) file.length()];
fis.read(bytes1);
String s1 = new String(bytes1);
System.out.println(s1);
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
字符流示例:
```java
import java.io.*;
public class CharacterStreamDemo {
public static void main(String[] args) {
try {
File file = new File("test.txt");
FileWriter fw = new FileWriter(file);
String s = "Hello, world!";
fw.write(s);
fw.close();
FileReader fr = new FileReader(file);
char[] chars = new char[(int) file.length()];
fr.read(chars);
String s1 = new String(chars);
System.out.println(s1);
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
这两个示例分别演示了使用字节流和字符流进行文件读写的过程。字节流示例中,使用 FileOutputStream 写入字节数据,使用 FileInputStream 读取字节数据;字符流示例中,使用 FileWriter 写入字符数据,使用 FileReader 读取字符数据。