java深入学习十一之IO流

来源:互联网 发布:linux 使用ftp 编辑:程序博客网 时间:2024/06/01 09:28

一、流(Stream)

1.java程序通过流来完成输入输出。例如,常用的System.out.println()中out就是System中一个 final static的PrintStream,还有控制台输入常用的Scanner scanner = new Scanner(System.in),in就是System中一个final static的InputStream。java程序或applet运行时,会自动创建3个流对象,System.in,System.out,System.error;

2.流是信息的抽象,是一序列的0和1,java可以通过流与物理设备通讯,交换信息,物理设备包括键盘,磁盘文件,网络等等。通过使用流,不需要知道理解物理设备的不同,例如键盘与网络,只需要使用相对应的流的类,而它的底层实现,java已经帮我们实现了。

3.根据程序中流的方向,从磁盘文件或控制台等到java程序,这是输入流;从java程序到磁盘文件或控制台等,这是输出流。

4.根据流的结构不同,可分为字节流和字符流(底层是字节流)。字节流是以字节为处理单位,字符流以字符为处理单位。字节为8个比特位,字符为多个字节。

5.字节流的输入输出基类是InputStream,OutputStream这两个抽象类,字符流的输入输出的基类是Reader,Writer这两个抽象类。其他流都是由这4个基类派生的,属于子类。下面是从他人博客找的图

流类图

6.字符流是对字节流的封装,操作更加简单,所以以字节流为例,了解各个类的功能。

  • FileInputStream:文件输入流,操作文件
  • FilterInputStream:过滤输入流,基本输入流只能读原始字节,这个类提供额外的功能,例如我们可以使用FilterInputStream的子类DateInputStream来将基本的字节过滤成整数,浮点数,等等。
  • ObjectInputStream:与IO流的序列化相关
  • PipedInputStream:管道(pipe)是线程间的同步通讯通道,线程之间用这两个类(包括PipedOutputStream)传输信息。
  • SequenceInputStream:合并输入流
  • StringBufferInputStream:(过时,不能正确将字节转化为字符,要用字符请使用StringReader)
  • ByteArrayInputStream:字节数组输入流,ByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。
    关闭 ByteArrayInputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException

7.例子

public static void main(String[] args) {        try {            StringBuilder sBuilder = new StringBuilder();            FileInputStream fin = new FileInputStream(new File("E:\\123.txt"));            byte b[] = new byte[1024];            while(fin.read(b)!=-1){//这个程序有个bug,读取1024个byte,如果是中文,可能会截断,            //如果是字符或数字等用一个byte表示的没问题,中文需要两个byte,这个是面向字节的输入流                sBuilder.append(new String(b).trim());            }            System.out.println(sBuilder.toString());            FileOutputStream fou = new FileOutputStream(new File("E:\\456.txt"));            fou.write(sBuilder.toString().getBytes());            fin.close();            fou.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为荣耀4x畅玩版内存不足怎么办 三星手机忘了解锁密码怎么办 荣耀8密码忘了怎么办 华为4x开不了机怎么办 华为指纹和密码解锁解不开怎么办 华为荣耀5x死机怎么办 华为荣耀开不了机怎么办 荣耀10开不了机怎么办 乐视pro3变砖了怎么办 手机升级后开不了机怎么办 华为g750开不了机怎么办 手机变砖怎么办插电没反应 变砖手机不通电怎么办 小米手机充电口坏了怎么办 小米2s尾插坏了怎么办 小米手机充电插口坏了怎么办 一条网线上两个亚马逊账号怎么办 加拿大28输20万怎么办 买家账户被亚马逊关闭余额怎么办 京东自营物流慢怎么办 京东退货不给退怎么办 刚付款不想要了怎么办 淘宝卖家拒绝退货退款怎么办 投诉不成立卖家怎么办 淘宝卖家被买家投诉卖假货怎么办 天猫三天未发货怎么办 天猫申请换货卖家不处理怎么办 天猫新疆不发货怎么办 天猫商城少发货怎么办 下单了卖家不发货怎么办 天猫超市漏发货怎么办 天猫购物几天不发货怎么办 天猫总是不发货怎么办 申请退款后卖家又发货了怎么办 天猫拍后申请退款卖家发货怎么办 淘宝上没下单却收到了货怎么办 被买家投诉三无产品怎么办 阿里巴巴卖家虚假发货怎么办 淘宝捡到便宜但是卖家不发货怎么办 被工商局查到三无产品怎么办 淘宝买到三无产品电器怎么办