前言
输入输出流的作用:实现绝大部分程序信息的输入和输出(I/O),这点在c++中体现的尤为明显。(cin和cout),java中,输入输出信息的处理都是通过数据流来实现的。、
就比如java中一开始接触的输出System.out.print。
本博客主要介绍java数据流的基本概念以及输入输出流的基本运用
一.流的划分
1.流的作用
首先介绍数据流。数据流是有顺序,有起点有终点的字节集合,是对输入和输出的总称和抽象。
一般情况下,数据流分为输入流(InputStream)和输出流(OutputStream)。输入流只能读不能写,输出流只能写不能读。
java通过流来连接设备完成输入和输出。
java主要定义了两种类型的流:字节流和字符流
2.字节流
字节流的顶层有两个抽象类:InputStrea和OutputStrea。定义了所有字节流的关键方法。
常用的字节流方法有很多,这里只是基础学习,有需要可以查找相关资料。
3.字符流
字符流的顶层有两个抽象类:Reader和Writer定义了所有字符流的关键方法,其中两个最重要的是read()和write(),它们分别进行字符数据的读和写。
其余方法有序号可以查找相关资料
二.标准输入流和输出流
1.标准输入
System.in作为字节输入流类InputStrea的对象实现标准输入,通过read()方法从键盘接收数据
int read();
int read(byte b[]);
int read(byte b[],int offset,int len);
import java.io.IOException;//支持IO流
public class StdInput{
public static void main(String[] args)throws IOException{
System.out.println("input:");
byte b[]=new byte[512];
int count=System.in.read(b);//输入键盘读取,b实际上是缓冲区
System.out.println("Output");
for(int i=0;i<count;i++)
System.out.print(b[i]+" ");
System.out.println();//硬回车=软回车+ctrl
for(int i=0;i<count;i++)
System.out.print((byte)b[i]+" ");
System.out.println("count="+count);
}
}
输入abcd
键盘进行了输入和输出。
2.Scanner类封装标准输入流
import java.util.Scanner;
public class ScannerSystemIn {
public static void main(String[] args) {
Scanner sin=new Scanner(System.in);//封装标准输入流
int a=sin.nextInt();//读取整数
double b=sin.nextDouble();//读取浮点数
double result=a*b;
System.out.println(result);
System.out.println(a);
}
}
在这个程序中,我们的System.in被封装,然后输入,可以输出流中得到我们输入的值并且对值进行处理。
结果如下
3.标准输出
System.out作为答应输出流PrintStream的对象实现标准输出,定义了print和pirntln方法,区别是print直接打印,而println中如果有“ ”则是换行。
三.串行化
1.概念及理解
对象寿命通常随着生成该对象的程序终止而终止,某些时候,需要把对象的状态保存下来,将来需要时回复,或者把对象传输到其他地方。
把对象的这种记录自己的状态几遍将来再生的能力称为对象的持续性。对象通过写出描述自己状态的数值来记录自己的过程称为对象的串行化。
主要任务:写出对象实例变量的数值。
2.运用
java提供了对象的串行化机制,在java.io包中,定义了一些接口和类作为对象串行化的工具
Serializable接口:只有实现该接口的对象才可以被串行化。它没有定义任何成员,只用来表示一个类可以被串行化。如果一个类可以被串行化,则它的所有子类都可以被串行化。
还有其余几个接口,需要自行查找。
初学者了解上述即可。