IO流是用来处理设备之间的数据传输,Java对数据的操作是通过流的方式进行,而操作流的对象都封装到java.io包中。根据操作数据的种类可以把IO流分为字节流(InputStream,OutputStream)和字符流(Reader,Writer)或者根据流的流向分为输入流(InputStream,Reader)输出流(OutputStream,Writer)

  字符流中继承体系结构:

  

字节流中的继承体系结构:

  FileWriter:字符输出流专门写入文本数据,使用后需要调用flush()方法,在close()方法后会自动内部刷新缓冲中的数据,因为是调用操作系统底层的资源进行文件操作,所以必须手动关闭资源,这个不是虚拟机垃圾回收机制能够回收的。

  FileReader:字符输入流可以使用char[]缓冲读取字符中的数据。使用try{}catch{}finally{}进行异常处理和资源回收。

  BufferedWriter:字符输出流缓冲区是为了提高流的操作效率而出现的,所以在创建缓冲区之前,必须要先有流对象。该缓冲区中提供了一个跨平台的换行符newLine()。

  BufferedReader:字符输入流缓冲区,该缓冲区提供了一个一次读一行的方法 readLine(),方便于对文本数据的获取,readLine方法返回的时候只返回回车符之前的数据内容,并不返回回车符。

  FileInputStream:字节输入流,原始的字节操作除了可以操作文本数据还可以操作视频、音频、图片等其他字符流不能操作的类型数据

  System.out:对应的是标准输出设备(PrintStream),控制台。System.in:对应的标准输入设备(InputStream):键盘输入。

  InputStreamReader:字节输入流转换器,可以把字节输入流转换成字符输入流。

  OutputStreamWriter:字节输出流转换器,可以把字节输出流转换成字符输出流。

  

流操作的基本规律:
  最痛苦的就是流对象有很多,不知道该用哪一个。

通过三个明确来完成。

  1,明确源和目的。
    源:输入流。InputStream Reader
    目的:输出流。OutputStream Writer。
  2,操作的数据是否是纯文本。
    是:字符流。
    不是:字节流。

  3,当体系明确后,在明确要使用哪个具体的对象。
    通过设备来进行区分:
    源设备:内存,硬盘。键盘
    目的设备:内存,硬盘,控制台。

  File:文件对象,不仅可以操作文件还可以操作对应的文件夹

  Properties:属性对象,是hashtable的子类也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串,是集合中和IO技术相结合的集合容器。该对象的特点:可以用于键值对形式的配置文件。那么在加载数据时,需要数据有固定格式:键=值。

  SequenceInputStream:合并多个流,对应的使用的就是Vector添加多个流对象。

  PipedInputStream,PipedOutputStream管道流可以直接读取和写入数据

PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream();
in.connect(out);

  RandomAccessFile该类不是算是IO体系中子类。而是直接继承自Object。但是它是IO包中成员。因为它具备读和写功能。内部封装了一个数组,而且通过指针对数组的元素进行操作。可以通过getFilePointer获取指针位置,同时可以通过seek改变指针的位置。其实完成读写的原理就是内部封装了字节输入流和输出流。通过构造函数可以看出,该类只能操作文件。而且操作文件还有模式:只读r,,读写rw等。

  DataInputStream与DataOutputStream可以用于操作基本数据类型的数据的流对象。  

  ByteArrayInputStream :在构造的时候,需要接收数据源,。而且数据源是一个字节数组。

  ByteArrayOutputStream: 在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组。(因为这两个流对象都操作的数组,并没有使用系统资源。所以,不用进行close关闭。)

  

  编码:字符串->字节数组,解码:字节数组->字符串。出现乱码就是编码使用的格式生成的数字用另一种编码格式进行解码导致码表中无法读取正确的字符,当显示?表示没有找到对应的字符(我们会使用的基本也就是GBK和UTF-8,乱码也就是没有控制两者的统一),

java中的IO操作的更多相关文章

  1. Java中的IO操作和缓冲区

    目录 Java中的IO操作和缓冲区 一.简述 二.IO流的介绍 什么是流 输入输出流的作用范围 三.Java中的字节流和字符流 字节流 字符流 二者的联系 1.InputStreamReader 2. ...

  2. java中的IO操作总结

    一.InputStream重用技巧(利用ByteArrayOutputStream) 对同一个InputStream对象进行使用多次. 比如,客户端从服务器获取数据 ,利用HttpURLConnect ...

  3. java学习系列(一)Java中的IO操作

    Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入\输出操作,在Java中把不同的输入\输出源抽象为"流",通过流的方式允许Java程序使用相同的方式来访问不同的输 ...

  4. 【转】Java中的IO操作

    在使用io操作之前,先看一下java中的文件类File如何使用.File包括文件和目录,对文件和目录的操作是新建目录mkdir,新建文件createNewFile,删除文件和目录delete,以及其他 ...

  5. 第12讲-Java中的IO操作及对象的序列化与反序列化

    1.知识点 1.1.课程回顾 1.2.本章重点 1.2.1  io操作 1.2.2  对象的序列化与反序列化 2.具体内容 2.1.Java IO 2.1.1.什么是IO IO其实就是输入.输出 I ...

  6. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  7. java中的IO流

    Java中的IO流 在之前的时候我已经接触过C#中的IO流,也就是说集中数据固化的方式之一,那么我们今天来说一下java中的IO流. 首先,我们学习IO流就是要对文件或目录进行一系列的操作,那么怎样操 ...

  8. JAVA学习记录(二)————JAVA中的IO

    Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列. 数据流是一串连续不断的数据的集合,就象水 ...

  9. JAVA中通过Jedis操作Redis连接与插入简单库

    一.简述 JAVA中通过Jedis操作Redis连接与插入简单库 二.依赖 <!-- https://mvnrepository.com/artifact/redis.clients/jedis ...

随机推荐

  1. Magento-找出没有图片的产品

    最近维护网站,发现网站的产品很多都没有图片显示,看了一下是因为没有在后台勾选图片,就是 image small_image  thumbnail 这三项,就算有图片如果没有勾选的话也不会显示出来,产品 ...

  2. javascript的类型、值和变量

    js的类型有多种分类,原始类型(数值,字符串,布尔值,null,undefined)和对象类型(object,String,Number,RgbExp等),或者是拥有方法的类型(object,Stri ...

  3. java的异常

    下面是我对Java异常知识的几个小总结,也算是资源回收一下 一.Java异常的知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运 ...

  4. 一个java的Profile工具

    场景:我们在系统运行中,需要监控某个代码段的运行时间,我们完全可以使用currentTimeMillis来做,但是做起来比较麻烦,尤其是需要阶段监控的时候,那么这个工具就出现啦~~~ 先说下想要实现的 ...

  5. 数据流 in redux

    之前用学过的react和react-router写了个单页面应用,但写完后总感觉还欠缺点什么,怎么说呢,就是感觉在数据流的控制上被框架约束的厉害,很不自由,比如兄弟组件间的通信就很不方便.然后才了解到 ...

  6. HTML5学习小结

    HTML5是用于取代1999年所制定的 HTML4.01和XHTML1.0标准的HTML标准版本.HTML5的第一份正式草案已于2008年1月公布:2012年12月,规范已经正式定稿.W3C计划在20 ...

  7. Linux_用户级_常用命令(2):cd

    开篇语:懒是人类进步的源动力 本文原创,专为光荣之路公众号所有,欢迎转发,但转发请务必写出处! Linux常用命令第二集包含命令:cd 一.格式: cd directory 使用cd命令在目录层次间移 ...

  8. Xcode Build Settings Architectures

    http://foggry.com/blog/2014/05/09/xcodeshe-zhi-xiang-zhi-architectureshe-valid-architectures/ https: ...

  9. C#:复杂条件判断类型(练习)

    /// <summary> /// 文件类型 /// </summary> public enum FileType { Courseware, //"课件" ...

  10. git使用ssh密钥

    1.查看本地是否有密钥对,如果存在就删除cd ~/.sshid_dsa id_dsa.pub 2.重新生成密钥对ssh-keygen -t rsa -C "your_email@yourem ...