在汉语本义中,流一般认为指水的移动,引申泛指液体移动。而在计算机中,流是建立在面向对象基础上的一种抽象的处理数据的工具。
计算机中的流是一种有序流。我们可以将计算机想象成一个蓄水的湖,将的水先储蓄湖中(Input),某一天,人们想用这个湖中的水了,就调出来(Output),这个运行整体输入/输出流(I/O Streams)。在这里就可以通过湖实现水交换和传输。这个水就是流。
我们应当在Java通过怎样的一种方式去让 流 在我们的电脑中输入/输出?
字节(字符)输入流(I):以内存为基准,来自磁盘文件/网络中的数据以字节(字符)的形式读入到内存中去的流称为字节(字符)输入流。
字节(字符)输出流(O):以内存为基准,把内存中的数据以字节(字符)写出到磁盘文件或者网络中去的流称为字节(字符)输出流。
Java为我们提供了几种API方便我们进行对字节(字符)流的输出与调用:
字节输入流
1、使用文件字节输入流读取字节数据。
public class FileInputStreamDome1 {
public static void main(String[] args) throws IOException {
InputStream is = new FileInputStream("file-app\src\data.txt") //创建字节输入流管道与源文件对象接通
//a.使用文件字节输入流每次读取一个字节的数据。
int len = is.read() ;//每次读取一个字节返回,如果字节已经没有可读的返回-1
System.out.println((char)len);
//b.使用文件字节输入流每次读取一个字节数组的数据。
byte[] buffer = new byte[3];//定义一个字节数组,读取字节数组
int len1 = is.read(buffer ) ;
String rs = new String(buffer,0,len1) ;//倒出多少读取多少
System.out.println(rs);
//c.使用文件字节输入流一次读完全部字节数据。
byte[] buffer1 = is.readAllBytes() ;
System.out.println(new String(buffer1));
}
}`
复制代码
字节输出流
1、使用文件字节输出流输出字节数据。
public class FileOutputStreamDome1 {
public static void main(String[] args) throws IOException {
//1、创建一个文件字节输出流管道与目标文件接通
//OutputStream os = new FileOutputStream("file-app//src//data1.txt");//先清空文件之前的数据,在进入
OutputStream os = new FileOutputStream("file-app//src//data1.txt",true);//不会清空
//2、写数据进入
//a.写一个字节
os.write('a') ;
os.write("\r\n".getBytes() ) ;//换行
//b.写一个字节数组
byte[] buffer = {'a',87,65,'z','x','n'};
os.write(buffer);//中文可能出现乱码
os.write("\r\n".getBytes() );
byte[] buffer2 = "你好,同志!".getBytes() ;//不会乱码
os.write(buffer2) ;
os.write("\r\n".getBytes() );
//c.写一个字节数组的一部分
os.write(buffer,1,4) ;
os.write("\r\n".getBytes() );
//os.flush() ;//刷新数据,进行后可以继续使用流
os.close() ;//释放数据,包含 flush的功能,进行后流不可使用
}
}
复制代码
字符输入流
1、使用文件字节输入流读取字符数据。
ublic class FileReaderDome1 {
public static void main(String[] args) throws IOException {
//1、创建一个字符输入流管道与源文件接通
Reader fr = new FileReader("file-app//src//data.txt") ;
//2、读取一个字符返回,没有可读的字符了返回-1
int code = fr.read() ;
System.out.print((char)code);
//3、用循环,读取一个字符数组的数据。
char[] buffer = new char[1024];
int len;
while((len = fr.read(buffer) )!= -1){
String rs = new String (buffer,0 ,len);
System.out.println(rs);
}
}
复制代码
字符输出流
1、使用文件字节输出流输出字符数据。
public class FileWriteDome2 {
public static void main(String[] args) throws IOException {
//1、创建一个文件字节输出流管道与目标文件接通
//Writer fw = new FileWriter("file-app//src//data2.txt");//先清空文件之前的数据,在进入
Writer fw = new FileWriter("file-app//src//data2.txt",true) ;//不会清空
//2、写数据进入
//a、写一个字符
fw.write('z') ;
fw.write("\r\n" ) ;//换行
//b、写一个字符串
fw.write("你好,同志") ;
fw.write("\r\n" ) ;//换行
//c、写一个字符数组
char[] chars = "你好,同志".toCharArray() ;
fw.write(chars) ;
fw.write("\r\n" ) ;//换行
//d、写字符串的一部分
fw.write("你好,同志",0,2);
fw.write("\r\n" ) ;//换行
//e、写字符数组的一部分
fw.write(chars,0,2);
fw.write("\r\n" ) ;//换行
//fw.flush() ;
fw.close() ;//释放数据
}
}
复制代码
字节流不适合读取中文内容输出;
字符流适合做文本文件的操作(读,写)
呼,结束~~
作者:time_silence
链接:https://juejin.cn/post/7148773909599862815
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。