IO流(四)

1:数据操做流(操做基本类型数据的流)(理解)面试

(1)数据操做流:数组

  能够读写基本类型的数据。
(2)流对象名称
网络

 数据输流:DataInputStream
       DataInputStream(InputStream in)
 数据输流:DataOutputStream
       DataOutputStream(OutputStream out)dom

 

2:内存操做流(理解)
(1)内存操做流:优化

  用于处理临时存储信息的,程序结束,数据就从内存中消失。ui

(2)如下:url

 字节数组:
   ByteArrayInputStream
   ByteArrayOutputStream
 字符数组:
   CharArrayReader
   CharArrayWriter
 字符串:
   StringReader
   StringWriterspa

 

注意:释放资源
   经过查看源码咱们知道这里什么都没作,因此根本不须要close()。指针

 

3:打印流(掌握)
(1)打印流:code

  字节打印流---PrintStream

  字符打印流---PrintWriter
(2)特色:
  1:只有写数据的,没有读取数据。只操做目的地,不操做数据源。
  2:能够操做任意类型的数据。
  3:若是启用了自动刷新(构造方法中第二参数为true,即开启自动刷新)。

   在调用println()方法的时候,可以换行并刷新

  println() --->
    其实等价于于:
   {   bw.write();

      bw.newLine();
      bw.flush();   }

  4:能够直接操做文件
  问题:哪些流能够直接操做文件呢?

  • FileInputStream
  • FileOutputStream
  • FileReader
  • FileWriter
  • PrintStream
  • PrintWriter

看API,若是其构造方法可以同时接收File和String类型的参数,通常都是能够直接操做文件的。

流:
 基本流:就是可以直接读写文件的。
 高级流:在基本流基础上提供了一些其余的功能。


(3)复制文本文件

 BufferedReader br = new BufferedReader(new FileReader("a.txt")); PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true); String line = null; while((line=br.readLine())!=null) { pw.println(line); } pw.close(); br.close();


4:标准输入输出流(理解)
(1)输入输出流:

 System类下面有这样的两个字段

  in 标准输入流

  out 标准输出流

System类中的两个成员变量:
   public static final InputStream in    “标准”输入流。
   public static final PrintStream out   “标准”输出流。

 InputStream is = System.in;
 PrintStream ps = System.out;

(2)三种键盘录入方式
  1:main方法的args接收参数
  2:System.in经过字符缓冲流包装标准输入流实现
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  3:Scanner
    Scanner sc = new Scanner(System.in);
(3)输出语句的原理和如何使用字符流输出数据
 A:原理

System.out.println("helloworld"); PrintStream ps = System.out; ps.println("helloworld");

  B:把System.out用字符缓冲流包装一下使用

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

5:随机访问流(理解)
(1)随机访问流:

  能够按照文件指针的位置写数据和读数据

  RandomAccessFile类不属于流是Object类的子类
  但它融合了InputStream和OutputStream的功能。
  支持对文件的随机访问读取和写入

(2)特色:

public RandomAccessFile(String name,String mode):第一个参数是文件路径,第二个参数是操做文件的模式。
  模式有四种,咱们最经常使用的一种叫"rw",这种方式表示我既能够写数据,也能够读取数据。

6:合并流(理解)
(1)合并流:

  把多个输入流的数据写到一个输出流中。
(2)构造方法:
  A:SequenceInputStream(InputStream s1, InputStream s2)
  B:SequenceInputStream(Enumeration<? extends InputStream> e)

7:序列化流(理解)
(1)序列化流:

  能够把对象写入文本文件或者在网络中传输

序列化流:把对象按照流同样的方式存入文本文件或者在网络中传输。          对象 -- 流数据(ObjectOutputStream)
反序列化流:把文本文件中的流对象数据或者网络中的流对象数据还原成对象。   流数据 -- 对象(ObjectInputStream)


(2)如何实现序列化呢?
  让被序列化的对象所属类实现序列化接口。
  该接口是一个标记接口。没有功能须要实现。
(3)注意问题:
  把数据写到文件后,在去修改类会产生一个问题。
如何解决该问题呢?
  在类文件中,给出一个固定的序列化id值。
  并且,这样也能够解决黄色警告线问题。
(4)面试题:

  • 何时序列化?
  • 如何实现序列化?
  • 什么是反序列化?

 

transient关键字:被标记的属性不能被序列化。

 

8:Properties(理解)
(1)Properties

  1.Properties:属性集合类。是一个可以和IO流相结合使用的集合类
  2.Properties 可保存在流中或从流中加载。属性列表中每一个键及其对应值都是一个字符串。

  3.是Hashtable的子类,说明是一个Map集合。

(2)特有功能

A:public Object setProperty(String key,String value)添加元素 B:public String getProperty(String key)获取元素 C:public Set<String> stringPropertyNames()获取全部的键的集合

(3)和IO流结合的方法

 

//把键值对形式的文本文件内容加载到集合中 public void load(Reader reader) public void load(InputStream inStream) //把集合中的数据存储到文本文件中 public void store(Writer writer,String comments) public void store(OutputStream out,String comments)

 

(4)案例:
A:根据给定的文件判断是否有键为"lisi"的,若是有就修改其值为100
B:写一个程序实现控制猜数字小游戏程序不能玩超过5次

9:NIO(了解)
(1)New IO:

JDK4出现的NIO,对之前的IO操做进行了优化,提供了效率。可是大部分咱们看到的仍是之前的IO

(2)JDK7的NIO的使用
Path:路径
Paths:经过静态方法返回一个路径
Files:提供了常见的功能
  复制文本文件
  把集合中的数据写到文本文件

相关文章
相关标签/搜索