关于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流的一些总结的主要内容,如果未能解决你的问题,请参考以下文章