关于IO流的一些总结

Posted arroa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于IO流的一些总结相关的知识,希望对你有一定的参考价值。

IO流:数据的流动   I--> intput流入   O--> output流出    

  java中,是jvm与硬盘之间字节的流动  流入和流出是以jvm为基准的,硬盘到jvm中就是流入,jvm到硬盘就是流出

  IO流顶层有四个父类【抽象类】

  字节输入流 InputStream         字节输出流  InputStream

  字符输入流 Writer                字符输出流  Reader      【只能对文本操作】

  实现类的构造都会关联一个文件,若是输出流的关联,若文件不存在可以不创建,会自动生成。    若是输入流的关联,若文件不存在则会报文件找不到异常

  常用基本方法 writer  read  flush【用在字符输出流中用于将录入的字符从缓冲区存进所关联的文件,(字节流不用,直接存字节)】  close【调用该方法时会自动刷新】

  一些实现类的功能与特点

  缓冲流;Buffer******:对四个基本流【File****】的增强。  给其增加一个缓冲区。  将基本流读取/写入的字节存至缓冲区,而不用基本流进行频繁的jvm到硬盘之间的流动。将其读写效率提高

  转换流:字节与字符的桥梁  编码与解码功能。  可指定编码方式      【读取windows系统中文本(默认使用的是gbk编码)时,会出现乱码(编译软件一般是utf—8)】【未避免乱码,读写保持一致编码】

  序列/反序列 化流:用于存/取实例对象在硬盘文本中      存入的对象必须实现Serializable接口  不想被存入的成员变量用transient修饰   

          保持写读的序列版本号一致 【格式:static final long serialVersionUID = 42L】

  打印流:    不成对,只有输出流

          PrintSteam  PrintWriter特点,与区别

            相同点特点:用自己独有的方法print/println都可输出任何格式的类型 | 只能输出

            不同点:当他们构造中开启自动换行时      PrintStream只要遇到换行符就会刷新      PrintWriter只有println/printf/famart方法调用时才会自动刷新

  内存操作流:  不关联任何文件,只在内存中读写数据,无需关闭    ByteArrayInputStream  ByteArrayOutputStream

 数据输入输出流: 可读写基本数据类型【读写类型顺序需要一致】      DataInputStream   DataOutputStream
 随机访问流:   存在文件指针   【断点下载】
          构造:RandomAccessFile(File file, String mode)  mode  文件类型  rw:可读可写
          方法
             in.seek(0);设置文件指针的位置    boolean b = raf.readBoolean();获取文件指针的位置【录入字符串时,会多用两个字节用于开始录入字符串准备】
 SequenceInputStream: 表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止
             SequenceInputStream(InputStream s1, InputStream s2)


 

  proterties   存储键值对【双列集合,hashtable子类,键值都为字符/串】  【存入时键值用等号连接,因为读取时是根据等号分割的】       【存储时会自动加data】    

               【存储的键值对中,被#注释的不会被读取】

 

          特有的方法:setProperty(String key, String value)添加键值对    String getProperty(String key)得到键对应的值      Set<String> stringPropertyNames()得到键集合

 

                load()读取键值对                store()输出键值对   括号(传入输入输出流用来关联并输入输出文件文件,注释)

 

 

                public void store(OutputStream out,String comments)  (Writer writer,String comments)     字节流使用中文【乱码】   

                注释不能使用中文    【windows(默认gbk编码)】编译软件【默认unicode】【一般用空字符串】

 

其他小知识

Scanner(InputStream source)         构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。
PrintStream out = System.out; 关联屏幕 out标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器
InputStream in = System.in;//in 关联的是键盘“标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入
键盘录入的第二种方式
Scanner scanner = new Scanner(System.in);
从文件扫描
Scanner scanner = new Scanner(new FileInputStream("a.txt"));

解耦思想:分离整体——————>将整体数据的分为部分1和部分2,可以新建一个3,将整体数据的部分2和部分3的对应起来。通过原整体之间部分2与部分1,变为3来对应部分1
ArrayList<Object> list2 = new ArrayList<>();————————>添加数据
   Random random = new Random();
int i = random.nextInt(list2.size());---------------->生成一个随机索引
System.out.println(list2.get(i));-------------------->解耦:程序和数据解耦

  

 

 

String s="wdwa";
Byte[] bytes=str.getBytes(); [B@1b6d3586
new String(bytes) wdwa
Arrays.toString(bytes) [119, 100, 119, 97]
String s1 = String.valueOf(chars, 0, len);----->不能转换byte类型和其他类型数组【char类型除外】

 

 

 

 

以上是关于关于IO流的一些总结的主要内容,如果未能解决你的问题,请参考以下文章

关于JAVA IO流的学习

第六周周总结

关于java中io流的关闭问题,部分代码,这种情况用不用关闭new FileReader(file)?

IO流的总结

JavaSE IO类层次关系和各种IO流的用法总结

IO流的总结