zoukankan      html  css  js  c++  java
  • 回顾JAVA---6. IO基础

    IO基础

    IO流

    (1)IO用于在设备间进行数据传输的操作
    (2)分类:
    A:流向
    输入流 读取数据
    输出流 写出数据
    B:数据类型
    字节流
    字节输入流 InputStream (FileInputStream  BufferedInputStream)
    字节输出流 OutputStream (FileOutputStream BufferedOutputStream)
    字符流
    字符输入流 Reader (FileReader BufferedReader)
    字符输出流 Writer (FileWriter BufferedWriter)
    注意:
    a:如果我们没有明确说明按照什么分,默认按照数据类型分。
    b:除非文件用windows自带的记事本打开我们能够读懂,才采用字符流,否则建议使用字节流。
    (3)FileOutputStream写出数据
    A:操作步骤
    a:创建字节输出流对象
    b:调用write()方法
    c:释放资源

    B:代码体现:
    FileOutputStream fos = new FileOutputStream("fos.txt");

    fos.write("hello".getBytes());

    fos.close();

    C:要注意的问题?
    a:创建字节输出流对象做了几件事情?
    b:为什么要close()?
    c:如何实现数据的换行?
    d:如何实现数据的追加写入?
    (4)FileInputStream读取数据
    A:操作步骤
    a:创建字节输入流对象
    b:调用read()方法
    c:释放资源

    B:代码体现:
    FileInputStream fis = new FileInputStream("fos.txt");

    //方式1
    int by = 0;
    while((by=fis.read())!=-1) {
    System.out.print((char)by);
    }

    //方式2
    byte[] bys = new byte[1024];
    int len = 0;
    while((len=fis.read(bys))!=-1) {
    System.out.print(new String(bys,0,len));
    }

    fis.close();

    字符流

    (1)字节流操作中文数据不是特别的方便,所以就出现了转换流。
       转换流的作用就是把字节流转换字符流来使用。
    (2)转换流其实是一个字符流
    字符流 = 字节流 + 编码表
    (3)编码表
    A:就是由字符和对应的数值组成的一张表
    B:常见的编码表
    ASCII
    ISO-8859-1
    GB2312
    GBK
    GB18030
    UTF-8
    C:字符串中的编码问题
    编码
    String -- byte[]
    解码
    byte[] -- String
    (4)IO流中的编码问题
    A:OutputStreamWriter
    OutputStreamWriter(OutputStream os):默认编码,GBK
    OutputStreamWriter(OutputStream os,String charsetName):指定编码。
    B:InputStreamReader
    InputStreamReader(InputStream is):默认编码,GBK
    InputStreamReader(InputStream is,String charsetName):指定编码
    C:编码问题其实很简单
    编码只要一致即可
    (5)字符流
    Reader
    |--InputStreamReader
    |--FileReader
    |--BufferedReader
    Writer
    |--OutputStreamWriter
    |--FileWriter
    |--BufferedWriter

    数据操作流(操作基本类型数据的流)

    (1)可以操作基本类型的数据
    (2)流对象名称
    DataInputStream
    DataOutputStream


    内存操作流

    (1)有些时候我们操作完毕后,未必需要产生一个文件,就可以使用内存操作流。
    (2)三种
    A:ByteArrayInputStream,ByteArrayOutputStream
    B:CharArrayReader,CharArrayWriter
    C:StringReader,StringWriter


    打印流

    (1)字节打印流,字符打印流
    (2)特点:
    A:只操作目的地,不操作数据源
    B:可以操作任意类型的数据
    C:如果启用了自动刷新,在调用println()方法的时候,能够换行并刷新
    D:可以直接操作文件
    问题:哪些流可以直接操作文件呢?
    看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();

    标准输入输出流

    (1)System类下面有这样的两个字段
    in 标准输入流
    out 标准输出流
    (2)三种键盘录入方式
    A:main方法的args接收参数
    B:System.in通过BufferedReader进行包装
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    C: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));


    随机访问流

    (1)可以按照文件指针的位置写数据和读数据。
    (2)案例:
    A:写数据
    B:读数据
    C:获取和改变文件指针的位置


    合并流

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


    序列化流

    (1)可以把对象写入文本文件或者在网络中传输
    (2)如何实现序列化呢?
    让被序列化的对象所属类实现序列化接口。
    该接口是一个标记接口。没有功能需要实现。
    (3)注意问题:
    把数据写到文件后,在去修改类会产生一个问题。
    如何解决该问题呢?
    在类文件中,给出一个固定的序列化id值。
    而且,这样也可以解决黄色警告线问题
    (4)面试题:
    什么时候序列化?
    如何实现序列化?
    什么是反序列化?


    Properties

    (1)是一个集合类,Hashtable的子类
    (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次


    NIO

    (1)JDK4出现的NIO,对以前的IO操作进行了优化,提供了效率。但是大部分我们看到的还是以前的IO
    (2)JDK7的NIO的使用
    Path:路径
    Paths:通过静态方法返回一个路径
    Files:提供了常见的功能
    复制文本文件
    把集合中的数据写到文本文件
  • 相关阅读:
    十四、内存泄露和强软弱虚引用
    十五、对象的内存布局
    Android Service全解(三)之 Foreground Service(转)
    android中不同activity的传参调用和返回
    Android Service全解(一)之 startService(转)
    Android Service全解(二)之 bindService(转)
    android单点、多点触控之MotionEvent
    关于创建进程函数CreateProcess()字符串参数的说明
    sql中连接两个不同的数据库(A在同一个服务器,B不在一个服务器)
    asp.net小数点四舍五入的方法
  • 原文地址:https://www.cnblogs.com/Amen-Z/p/8511986.html
Copyright © 2011-2022 走看看