A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

IO流的分类:
1.流对象划分例子:
操作内存中的流对象:InputStreamReader
操作外界设备中的流对象:InputStream,OutputStream
如何区别:所有流对象后缀名称包含Reader又或者Writer 都是属于内存中操作的流对象,否则都视为外界设备流.其中PrintStream例外
2.数据流向划分:
输出流:写入数据 属于程序内存到外界设备  例如jvm运行的程序直接操作到本地硬盘上
输入流:当然事读取数据 与上面反则的道理
一般输入流名称带有Input 而输出流Output
3.流数据格式划分:
对于数据的处理,每个流不同都有其自身操作的优势.
字符流处理声音或者图片等数据比较好,比如InputStream
字符流处理文本格式的数据如InputStreamReader
区分方法 操作内存是字符流,操作外界设备属于字节流

4.流数据包装
原始流:实例化对象过程不需传入另外的流为自己构造参数成为原始流
包装流:实例化对象需要传入另外流为自己构造参数叫包装流

下面是一些流对象使用demo
/*
     * 字节流缓冲区流读写字节数组
     */
    private static void copyFile(File srcFile, File destFile) throws IOException {
        // 计数器加一
        count ++;
        // 创建字节输入流
        FileInputStream fis = new FileInputStream(srcFile);
        // 创建字节输出流
        FileOutputStream fos = new FileOutputStream(destFile);

        int len = 0;
        byte[] buffer = new byte[1024];
        // 循环读取数据
        while((len = fis.read(buffer)) !=-1) {
            // 利用输出流往输出目的写数据
            fos.write(buffer,0,len);
        }

        // 关闭资源
        fis.close();
        fos.close();
    }
//文件输入流写入数据
public static void calc(Character a) throws IOException {
        Map<Character,Integer> maps = new HashMap<>();
        FileInputStream fis = new FileInputStream("lhh.txt");
        int len = -1;
        while ( (len = fis.read()) != -1){
            char ch = (char) len;
            if(maps.get(ch) == null){
                maps.put(ch,1);
            }else {
                Integer cout = maps.get(ch);
                maps.put(ch,cout+1);
            }
        }
        System.out.println(a+"出现"+maps.get(a)+"次");

    }
BufferedWriter 字符缓冲流操作
private static void reverseCopy() throws Exception
    {
        BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt"));
        bw.write("我爱黑马");
        bw.newLine();
        bw.write("123456");
        bw.close();
        BufferedReader br = new BufferedReader(new FileReader("test.txt"));
        String line = null;
        List<String> list = new ArrayList<>();
        while ((line = br.readLine()) != null) list.add(line);
        //br.close();
        Collections.reverse(list);
        BufferedWriter bw0 = new BufferedWriter(new FileWriter("test1.txt"));
        for(String s : list)
        {
            bw0.write(s);
            bw0.newLine();
        }
        bw0.close();
    }

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马