IO流(四)

1:数据操作流(操作基本类型数据的流)(理解)

(1)数据操作流:

  可以读写基本类型的数据。
(2)流对象名称

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

 

2:内存操作流(理解)
(1)内存操作流:

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

(2)以下:

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

注意:释放资源
   通过查看源码我们知道这里什么都没做,所以根本不需要close()。

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

  字节打印流---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)面试题:

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

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:提供了常见的功能
  复制文本文件
  把集合中的数据写到文本文件

猜你喜欢

转载自www.cnblogs.com/crazypokerk/p/9102290.html
今日推荐