java IO流的核心在于对字节、字符类型数据的输入和输出,流的本质是数据传输,并且流是单向的,从数据角度分为两个大类,字节流和字符流
通常我们再使用流时不是单单的使用某一个流,我们会将几个流组装成一个口进行数据的传输,比如输入流:
FileInputStream fis=new FileInputStream("./demo.java");
//当读取的不是文件而是流时,可以通过socket获取流
//eg. InputStream is=socket.getInputstream();
InputStreamReader isr=new InputStreamReader(fis);//转换流
//在这里是可以指定字符的编码格式的,在括号里边加一个逗号,后边直接写Standardcharsets
BufferedReader br=new BufferedReader(isr);//缓冲流
在这里就可以直接对br进行读操作,如String line=br.readLine();
输出流:
FileoutputStream fos=new FileOutputStream("./demo2.java");
//当然这里如果不是输出文件的话也可以通过socket获取OutputStream进行流的输出
//eg. OutputStream os=socket.getOutputStream();
OutputStreamWriter osw=new OutputStreamWriter(os);
BufferedWriter bw=new BufferedWriter(osw);
PrintWriter pw=new PrintWriter(bw);//这里建议加上自动行刷新,在括号里bw后边加上,true
接下来就能直接调用pw.writer(line);输出line的内容到socket源
上述用到的流有几种:
1.字节输出输入流OutputStream,InputStream,他们是字节流的超类
2.字符输出输入流:Writer和Reader,他们是字符流的超类
3.转换流:转换流通常使用在字节和字符需要转换或是需要编解码时
4.缓冲流:这类流可以认为是一个数组,其内部加载一个定长的数组,每次装满/被flush后就输出一次或输入一次
下面是一份更细致的Java IO流整理的文章,可以参考一下: