Java中的字节流和字符流是用于处理输入和输出的两种不同的流。
区别
1. 数据类型:字节流以字节为单位进行读写,而字符流以字符为单位进行读写。字节流可以处理任意类型的数据,包括文本、图像、音频等,而字符流主要用于处理文本数据。
2. 编码方式:字节流是以字节的形式直接读写数据,不关心数据的具体编码方式。而字符流是以字符的形式读写数据,会根据指定的字符编码将字符转换为字节进行处理。
3. 处理效率:字节流的处理效率通常比字符流高,因为字节流直接操作底层的字节数据,不需要进行字符编码的转换。
4. 使用场景:字节流适用于处理二进制数据,如文件的复制、网络传输等。字符流适用于处理文本数据,如文件的读写、文本的处理等。
联系
1. 继承关系:字节流和字符流都是抽象类InputStream和OutputStream的子类,以及Reader和Writer的子类。
2. 使用方式:字节流和字符流都提供了类似的读写方法,如read()和write()方法。
3. 转换:可以通过InputStreamReader和OutputStreamWriter类将字节流转换为字符流,以便处理文本数据。
4. 字符流是建立在字节流的基础上的。在字符流中,使用了字符编码来处理字符数据,而字符编码又是通过字节流来实现的。因此,字符流可以看作是字节流的高级封装,提供了更方便的字符处理功能。
1. InputStream:所有字节输入流的超类。
2. FileInputStream:从文件中读取数据的输入流。
3. BufferedInputStream:带有缓冲区的输入流,提高读取效率。
4. DataInputStream:可以从输入流中读取Java基本数据类型的输入流。
5. ObjectInputStream:可以从输入流中读取Java对象的输入流。
6. OutputStream:所有字节输出流的超类。
7. FileOutputStream:向文件中写入数据的输出流。
8. BufferedOutputStream:带有缓冲区的输出流,提高写入效率。
9. DataOutputStream:可以向输出流中写入Java基本数据类型的输出流。
10. ObjectOutputStream:可以向输出流中写入Java对象的输出流。
1. Reader:所有字符输入流的超类。
2. FileReader:从文件中读取字符的输入流。
3. BufferedReader:带有缓冲区的输入流,提高读取效率。
4. InputStreamReader:将字节流转换为字符流的输入流。
5. Writer:所有字符输出流的超类。
6. FileWriter:向文件中写入字符的输出流。
7. BufferedWriter:带有缓冲区的输出流,提高写入效率。
8. OutputStreamWriter:将字符流转换为字节流的输出流。
InputStream inputStream = new FileInputStream("example.txt");
int data = inputStream.read();
while (data != -1) {
System.out.print((char) data);
data = inputStream.read();
}
inputStream.close();
这段代码创建了一个文件输入流,读取了文件中的每一个字节,并将其转换为字符输出到控制台上。最后关闭了输入流。
FileInputStream inputStream = new FileInputStream("example.txt");
int data = inputStream.read();
while (data != -1) {
System.out.print((char) data);
data = inputStream.read();
}
inputStream.close();
这段代码创建了一个文件输入流,读取了文件中的每一个字节,并将其转换为字符输出到控制台上。最后关闭了输入流。
InputStream inputStream = new FileInputStream("example.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
int data = bufferedInputStream.read();
while (data != -1) {
System.out.print((char) data);
data = bufferedInputStream.read();
}
bufferedInputStream.close();
这段代码创建了一个文件输入流,并将其包装在一个带有缓冲区的输入流中。读取了文件中的每一个字节,并将其转换为字符输出到控制台上。最后关闭了输入流。
InputStream inputStream = new FileInputStream("example.txt");
DataInputStream dataInputStream = new DataInputStream(inputStream);
int data = dataInputStream.readInt();
System.out.println(data);
dataInputStream.close();
这段代码创建了一个文件输入流,并将其包装在一个可以读取Java基本数据类型的输入流中。读取了文件中的一个整数,并将其输出到控制台上。最后关闭了输入流。
InputStream inputStream = new FileInputStream("example.txt");
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
Object object = objectInputStream.readObject();
System.out.println(object);
objectInputStream.close();
这段代码创建了一个文件输入流,并将其包装在一个可以读取Java对象的输入流中。读取了文件中的一个对象,并将其输出到控制台上。最后关闭了输入流。
OutputStream outputStream = new FileOutputStream("example.txt");
String data = "Hello, world!";
outputStream.write(data.getBytes());
outputStream.close();
这段代码创建了一个文件输出流,将一个字符串转换为字节数组,并将其写入到文件中。最后关闭了输出流。
FileOutputStream outputStream = new FileOutputStream("example.txt");
String data = "Hello, world!";
outputStream.write(data.getBytes());
outputStream.close();
这段代码创建了一个文件输出流,将一个字符串转换为字节数组,并将其写入到文件中。最后关闭了输出流。
OutputStream outputStream = new FileOutputStream("example.txt");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
String data = "Hello, world!";
bufferedOutputStream.write(data.getBytes());
bufferedOutputStream.close();
这段代码创建了一个文件输出流,并将其包装在一个带有缓冲区的输出流中。将一个字符串转换为字节数组,并将其写入到文件中。最后关闭了输出流。
OutputStream outputStream = new FileOutputStream("example.txt");
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
int data = 42;
dataOutputStream.writeInt(data);
dataOutputStream.close();
这段代码创建了一个文件输出流,并将其包装在一个可以写入Java基本数据类型的输出流中。将一个整数写入到文件中。最后关闭了输出流。
OutputStream outputStream = new FileOutputStream("example.txt");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
Object object = new Object();
objectOutputStream.writeObject(object);
objectOutputStream.close();
这段代码创建了一个文件输出流,并将其包装在一个可以写入Java对象的输出流中。将一个对象写入到文件中。最后关闭了输出流。
Reader reader = new FileReader("file.txt");
int data = reader.read();
while (data != -1) {
System.out.print((char) data);
data = reader.read();
}
reader.close();
代码含义:创建一个Reader对象,使用FileReader将文件"file.txt"作为输入流。然后使用read()方法读取字符,并将其打印出来,直到读取到文件末尾(返回-1)。最后关闭输入流。
FileReader reader = new FileReader("file.txt");
int data = reader.read();
while (data != -1) {
System.out.print((char) data);
data = reader.read();
}
reader.close();
代码含义:创建一个FileReader对象,将文件"file.txt"作为输入流。然后使用read()方法读取字符,并将其打印出来,直到读取到文件末尾(返回-1)。最后关闭输入流。
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
reader.close();
代码含义:创建一个BufferedReader对象,使用FileReader将文件"file.txt"作为输入流,并带有缓冲区。然后使用readLine()方法读取一行字符,并将其打印出来,直到读取到文件末尾(返回null)。最后关闭输入流。
InputStreamReader reader = new InputStreamReader(new FileInputStream("file.txt"), "UTF-8");
int data = reader.read();
while (data != -1) {
System.out.print((char) data);
data = reader.read();
}
reader.close();
代码含义:创建一个InputStreamReader对象,使用FileInputStream将文件"file.txt"作为字节流输入流,并将其转换为字符流输入流。指定字符编码为UTF-8。然后使用read()方法读取字符,并将其打印出来,直到读取到文件末尾(返回-1)。最后关闭输入流。
Writer writer = new FileWriter("file.txt");
writer.write("Hello, World!");
writer.close();
代码含义:创建一个Writer对象,使用FileWriter将字符写入到文件"file.txt"中。然后使用write()方法写入字符串"Hello, World!"。最后关闭输出流。
FileWriter writer = new FileWriter("file.txt");
writer.write("Hello, World!");
writer.close();
代码含义:创建一个FileWriter对象,将字符写入到文件"file.txt"中。然后使用write()方法写入字符串"Hello, World!"。最后关闭输出流。
BufferedWriter writer = new BufferedWriter(new FileWriter("file.txt"));
writer.write("Hello, World!");
writer.newLine();
writer.write("This is a new line.");
writer.close();
代码含义:创建一个BufferedWriter对象,使用FileWriter将字符写入到文件"file.txt"中,并带有缓冲区。然后使用write()方法写入字符串"Hello, World!“,使用newLine()方法写入一个新行,再使用write()方法写入字符串"This is a new line.”。最后关闭输出流。
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("file.txt"), "UTF-8");
writer.write("Hello, World!");
writer.close();
代码含义:创建一个OutputStreamWriter对象,使用FileOutputStream将字节流输出到文件"file.txt"中,并将其转换为字符流输出流。指定字符编码为UTF-8。然后使用write()方法写入字符串"Hello, World!"。最后关闭输出流。