字符流:处理字符相关,如处理⽂本数据(如txt⽂件), Reader/Writer
字节流: 处理字节相关,如声⾳或者图⽚等⼆进制,InputStream/OutputStream
区别:
1.字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,⼀次可能读多个字节
2.字节流可以处理⼏乎所有⽂件,字符流只能处理字符类型的数据
形成的四个抽象类
字符流 Reader/Writer
字节流 InputStream/OutputStream
InputStream是输⼊字节流的⽗类,它是⼀个抽象类(⼀般⽤他的⼦类)
1.int read()
讲解:从输⼊流中读取单个字节,返回0到255范围内的int字节值,字节数据可直接转换为int类 型, 如果已经到达流末尾⽽没有可⽤的字节,则返回-1
2.int read(byte[] buf)
讲解:从输⼊流中读取⼀定数量的字节,并将其存储在缓冲区数组buf中, 返回实际读取的字节数,如果已经到达流末尾⽽没有可⽤的字节,则返回-1
3.long skip(long n)
讲解:从输⼊流中跳过并丢弃 n 个字节的数据。
4.int available()
讲解:返回这个流中有多少个字节数,可以把buf数组⻓度定为这个
5.void close() throws IOException
讲解:关闭输⼊流并释放与该流关联的系统资源
常⻅⼦类FileInputStream
抽象类InputStream⽤来具体实现类的创建对象, ⽂件字节输⼊流, 对⽂件数据以字节的形式进⾏读取操作
该流用于从文件读取数据
1.常⽤构造函数
//1.可以使用字符串类型的文件名来创建一个输入流对象来读取文件:
InputStream f = new FileInputStream("C:/java/hello");
//2.使用一个文件对象来创建一个输入流对象来读取文件。
//我们首先得使用 File() 方法来创建一个文件对象:
File f = new File("C:/java/hello");
InputStream in = new FileInputStream(f);
练习
package IO;
import java.io.*;
public class Main {
public static void test() throws IOException {
File file = new File("D:\\javaSE"+"\\a.txt");
InputStream inputStream = new FileInputStream(file);
}
public static void read(InputStream inputStream) throws IOException {
int a = inputStream.read();
System.out.println(a);//读取单个字符,返回int
}
public static void readMore(InputStream inputStream) throws IOException {
byte []bytes = new byte[1024];
int b = inputStream.read();
System.out.println(b);
}
public static void skip(InputStream inputStream) throws IOException {
long b = inputStream.skip(5);
System.out.println(inputStream.read()+"字符为 "+(char)inputStream.read());
}
public static void zijie(InputStream inputStream) throws IOException {
int length = inputStream.available();
System.out.println("字节数量为: "+length);
byte []bytes = new byte[length];
int length1 = inputStream.read(bytes);
System.out.println(new String(bytes,0,length1));
//最后记得关闭流
inputStream.close();
}
public static void main(String []args) throws IOException {
File file = new File("D:\\javaSE"+"\\a.txt");
InputStream inputStream = new FileInputStream(file);
// readMore(inputStream);
// skip(inputStream);
zijie(inputStream);
}
}
//String(byte[] bytes,int offset,int length);通过byte数组,从offset开始,总共length长的字节构造字符串对象