黑马程序员技术交流社区

标题: IO流附属小总结 [打印本页]

作者: Anlai    时间: 2015-8-24 13:52
标题: IO流附属小总结
内存操作流:  把数据写入到内存中,完成数据的临时存储, 可以使用对应的流对象从内存中读取数据

        a:操作字节数组
                ByteArrayOutputStream
                ByteArrayInputStream
        b:操作字符数组
                CharArrayWriter
                CharArrayReader
        c:操作字符串
                StringWriter
                StringReader

                写数据:
                                ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
                                bos.write("我爱您刘亦菲".getBytes()) ;
                               
                                // 获取数据
                                byte[] bytes = bos.toByteArray() ;
                                // String str = bos.toString() ;
                                // System.out.println(str);

                                ByteArrayInputStream  bis = new ByteArrayInputStream(bytes) ;
                               
                                byte[] bytes = new byte[1024] ;
                                int len = 0 ;
                                while((len = bis.read(bytes)) != -1){
                                        System.out.println(new String(bytes , 0 , len))  ;
                                }
打印流:
        字节打印流        PrintStream
        字符打印流        PrintWriter

        打印流的特点:
                只有输出端,没有输入端
                可以操作任意的数据类
                如果启动的自动刷新可以完成自动刷新
                可以操作文件的流
                        指的是构造方法可以直接接受文件或者文件对应的路径
                那些流是操作文件流:
                        FileInputStream
                        FileOutputStream
                        FileReader
                        FileWriter
                        PrintStream
                        PrintWriter

作为Writer的子类使用
                        // public void write(int ch) : 一次写一个字符
                        // public void write(char[] ch) : 一次写一个字符数组
                        // public void write(char[] ch , int offset , int length) : 一次写一个字符数组中的一部分
                        // public void write(String str) : 一次写一个字符串
                        // public void write(String str , int offset , int length) : 一次写一个字符串中的一部分
启动自动刷新:
        public PrintWriter(Writer out,  boolean autoFlush)                 
        public PrintWriter(OutputStream out, boolean autoFlush)

        如果启用了自动刷新,则只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。

         println方法在启动了自动刷新以后可以分为
         写一个字符串
         刷新
         换行

使用打印流复制文件:
                BufferedReader br = new BufferedReader(new FileReader("a.txt")) ;
                PrintWriter bw = new PrintWriter(new FileWriter("b.txt") , true) ;
               
                String line = null ;
                while((line = br.readLine()) != null){
                        bw.println(line);
                }
               
                bw.close() ;
                br.close() ;

键盘录入的方式:
        a: 使用main方法进行键盘录入
        b: 使用Scanner进行键盘录入
        c: BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;
                String line = br.readLine() ;
                System.out.println(line);

对标准输出流进行包装
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)) ;
                bw.write("中国") ;
                bw.flush() ;
               
                bw.close() ;

序列化流于反序列化流
        所谓的序列化就是把对象通过流的方式存储到文件中.
        反序列化就是把文件中存储的对象以流的方式还原成对象
                ObjectInputStream和ObjectOutputStream

        ObjectOutputStream 是序列化流: 可以把一个对象写入到文件中,这个对象对应的类要实现Serializable接口
               
                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.txt")) ;
                Student s = new Student("刘亦菲" , 24) ;
                oos.writeObject(s) ;
                oos.close() ;

        ObjectInputStream 反序列化: 可以把文件中存储的对象以流的方式读取到程序中

                ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.txt")) ;
                Object object = ois.readObject() ;
                System.out.println(object);

                java.io.EOFException:  因为对应的文件中没有数据
                       
        使用transient关键字声明不需要序列化的成员变量

Properties的父类的是Hashtable属于双列集合, 可以和IO流进行配合使用
        属性列表中每个键及其对应值都是一个字符串。
       
                public Object setProperty(String key,String value):                添加元素
                public String getProperty(String key):                                        根据键获取值
                public Set<String> stringPropertyNames():                                获取所有的键的Set集合
                public void load(Reader reader):                                                把文件中的数据通过IO流加载到对应的Properties中
                public void store(Writer writer,String comments):                把Properties中的数据通过IO流存储到文件中, comments: 表示的注释的意思

                在properties作为配置文件的时候使用的注释是以: # 开始
作者: 天使也掉毛    时间: 2015-8-24 14:22
恩恩不错




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