黑马程序员技术交流社区

标题: IO流 [打印本页]

作者: 空白心    时间: 2015-6-14 22:18
标题: IO流
字节流:
        1.类层次结构:
        OutputStream:
                |--FileOutputStream:
                |--FilterOutputStream:(没学)
                        |--BufferedOutputStream:
        InputStream:
                |--FileInputStream:
                |--FilterInputStream:(没学)
                        |--BufferedInputStream:
        2.写入的方法:
                write(int n):写入一个字节:
                write(byte[] byteArray):写入一个字节数组;
        3.读取的方法:
                int read():读取一个字节:
                int read(byte[] byteArray):读取一个字节数组;
        4.字节流可以对:二进制文件和文本文件进行读写。
        5.当读写二进制文件时:首选带缓冲的字节流;
          当读写文本文件时:如果不需要显示,也可以选择字节流。通常
                           使用带缓冲的字符流。

二:字符流:
        1.类层次结构:
        Writer:
           |--OutputStreamWriter:
                |--FileWriter:
           |--BufferedWriter:
        Reader:
           |--InputStreamReader:
                |--FileReader:
           |--BufferedReader:
        2.写入的方法:
                基本字符流,和缓冲流都具有的:
                        write(int n):写入一个字符:
                        write(char[] charArray):写入一个字符数组;
                        write(char[] charArray,int off,int len):写入字符数组的一部分;
                        write(String s):写入一个字符;
                        write(String s,int off,int len):写入一个字符串的一部分;
                缓冲流特有的:
                        BufferedWriter:
                                newLine();
                        BufferedReader:
                                String s readLine();
        3.当需要对文本文件进行读写,显示:首选使用带缓冲的字符流;


数据输入输出流:
        DataInputStream:数据输入流:
        DataOutputStream:数据输出流:
        可以读写任何的Java的基本数据类型;
二.内存操作流:
        ByteArrayOutputStream:向内存中写入byte[]数组;
        ByteArrayInputStream:从内存中读取byte[]数组;
        作用:
        缓存byte[]数组;就跟StringBuffer缓存String作用相同;
三.打印流:
        1.打印字符流:PrintWriter:
        2.打印字节流:PrintStream:
        特点:
                1.只有输出,没有输入;
                2.可以输出任何类型的数据;
                3.有自动刷新功能,如果启用,部分功能将具有自动刷新功能:
                                println(),printf(),format()
                4.可以操作文件;
四.标准输入输出流:
        1.System.in : InputStream
        2.System.out: PrintStream
        3.将标准输入流转换为带缓冲的输入流:
                BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        4.三种方式实现获取控制台数据:
                1).Scanner();
                2).main()方法的形参;
                3).System.in;
五.随机访问流:
        1.RandomAccessFile:
        2.它不是流,直接继承自Object
        3.它内部结合了InputStream和OutputStream可以对文件进行读写;
        4.构造方法的mode参数:
                "r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。  
                "rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。  
                "rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。  
                "rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
        5.getFilePointer()获取文件指针;
          seek():设置文件指针;
六.序列化和反序列化:
        1.ObjectOutputStream:序列化;
                writeObject(Object obj):
        2.ObjectInputStream:反序列化:
                Object obj readObject();
        3.注意:
                1).被序列化的对象,必须实现Serializable 接口;
                2).被序列化的对象,建议显示的定义成员常量:serialVersionUID
                3).transient可以修饰成员变量不被序列化;
七.Properties类:
        1.它是Map的实现类,直接继承自:Hashtable。所以它就是一个Map
        2.用它来读写配置文件信息;
        3.特有方法:
                setProperty(String key,String value):put()
                getProperty(String key):              get()
                stringPropertyNames():                      keySet()
          读写配置文件:
                load(Reader reader):从配置文件中读取属性信息
                store(Writer writer,String comments):向配置文件中写入信息
八.新IO的方法:
        Path:与平台无关的路径。
        Paths:包含了返回Path的静态方法。
                public static?Path?get(URI?uri):根据给定的URI来确定文件路径。
        Files:操作文件的工具类。提供了大量的方法,简单了解如下方法
                public static?long?copy(Path?source, OutputStream?out) :复制文件
                public static?Path?write(Path path, Iterable<? extends CharSequence> lines,Charset cs,OpenOption... options):
                把集合的数据写到文件。

                        线程实现方式:
        1.继承Thread类;
        2.实现Runnable接口;

二.设置获取线程的名称:
        getName()和setName(String name);
三.设置获取线程的优先级:
        getPriority()和setPriority(int n);
        线程的优先级范围:1--10(从低到高)
四.线程的休眠:sleep(long m):休眠到指定的m毫秒后,将自动醒来;
   加入:join();
   礼让:yield():退回到"就绪状态",可能会被操作系统重新分配;
   守护:setDaemon(boolean on):on为true,守护线程。主进程结束,守护线程也结束,但不会立即结束,会有一个小缓冲;
   中断:stop()(过时了)
         interrupt():线程一定要处于:Object-->wait();Thread-->sleep();Thread--join()三种状态之一时,才能触发此异常;
五.解决并发性问题:
        1.使用关键字:synchronized
        2.synchronized可以修饰一个代码块:同步代码块
          synchronized可以修饰一个方法:同步方法
        3.静态的方法可以被synchronized修饰。
          静态的方法内部也可以包含synchronized的代码块,但一般锁定是某个类的class对象。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2