首页 > 代码库 > java基础篇IO流的规律

java基础篇IO流的规律

前两篇降了IO流中的字节流和字符流复制的例子,今天来总结一下IO流的规律

掌握好IO流的规律,再开发中会很好用

下面来总结一下:

1,明确源和目的
  源:输入流 InputStream 和Reader
  目的:输出流 OutputStream 和Writer
2,操作的数据是否是纯文本。
   是:使用字符流
   不是:使用字节流
3,当体系明确后,在明确要使用哪个具体的对象,通过设备来进行区分
   源设备: 内存,硬盘,键盘 
   目的设备: 内存,硬盘,控制台

这里的源就是你想进行的操作,比如说你想从c盘复制一个文件到d盘,那么C磁盘中要操作的文件就是源,如果是文本文件的话,那么源就可以用字符流。如果是图片,MP3

文件等那么源就是字节流,再举个例子,比如说你要读取键盘录入,那么这是你是不是要读取键盘错做的字符啊,这是你就应该想到是用输入流,读取嘛

下面贴出一个键盘录入的例子

分析:
   读取键盘录入:
   System.out:对应单的是标准的输出设备,控制台。
   Syste.in:对应的标准输入设备:键盘,
   需求:
   通过键盘录入数据,
   当录入一行数据后,就将该行数据进行打印。
   如果录入的数据时over。那么将停止录入
这里的源就是我刚说的键盘,目的呢,是控制台,既然源是键盘,那么就要用到输入流,相反目的就是输出流

import java.io.*;//这里我导入了io所有的包
class  ReadDemo
{
public static void main(String[] args)throws IOException 
{
InputStream in=System.in;
StringBuilder sb=new StringBuilder();
while(true)
{
int ch=in.read();
if(ch==‘\r‘)
continue;
if(ch==‘\n‘)
{
String s=sb.toString();
if("over".equals(s))
break;
System.out.println(s);
sb.delete(0,sb.length());
}
else
sb.append((char)ch);
}

}
}



扩展一下,想要把录入的数据按照指定的编码表(UTF-8),讲数据保存到文件中


目的:OutPurStream Writer
是否是纯文本 是 Writer
设备:硬盘 一个文件,使用FileWriter
但是FileWriter是使用默认编码表GBK
但是存储时需要加入指定的编码表,utf-8,而指定的编码表只有转换流可以指定
所以要使用的对象时OutPurStreamWriter
而该转换流对象接受一个字节输出流,而且还可以操作的文件的字节输出流FIleOutPutStream
OutputStreamWriter osw = new OutPutSreamWriter(new FileOutputStream("d.txt"),"utf-8");
需要高效吗,需要那么就需要建立缓冲区
BufferWriter bufw =new BufferWriter(osw);
所以,记住转换流什么使用,字符和字节之间的桥梁,通常涉及到字符编码转换时需要用到转换流

import java.io.*;
class  Demo
{
public static void main(String[] args)throws IOException 
{
//获取键盘录入对象
InputStream in =System.in;
//将字节流对象转成字符流对象,使用转换流。InputStreamReader
InputStreamReader isr=new InputStreamReader(in);
//为了提高效率,将字符串进行缓冲区技术高效操作使用BufferedReader
BufferedReader bufr=new BufferedReader(isr);
String line=null;
while((line=bufr.readLine())!=null)//读取
{
if("over".equals(line))
break;
System.out.println(line);
}
bufr.close();//关闭流
}
}