温故而知新(六)Java基础:IO流(此文章暂时未写完)

来源:互联网 发布:上海萌动网络 编辑:程序博客网 时间:2024/05/17 15:18

输入流和输出流的类层次图

这里写图片描述


I/O简介

Java提供了两种类型的输入输出流:一种是面向字节的流,数据的处理以字节为基本单位;另一种是面向字符的流,用于字符数据的处理。

  • 字节流
    字节流(Byte Stream)每次读写8位二进制数,也称为二进制字节流

  • 字符流
    字符流一次读写16位二进制数,并将其做一个字符而不是二进制位来处理

    注意:为满足字符的国际化表示,Java语言的字符编码采用的是16位的Unicode码,而普通文本文件中采用的是8位ASCⅡ码


常用I/O流

从上图可以看出,流的结构层次来说有很多。这里只介绍常用的几种。

字节流

  • InputStream字节输入流
FileInputStream : 从文件中读取的输入流BufferedInputStream : 缓存输入流 //构造方法InputStream f = new FileInputStream("D:/aa.apk");//或:File f = new File("D:/aa.apk");InputStream out = new FileInputStream(f);

常用方法:

这里写图片描述

  • OutputStream字节输出流
FileOutputStream : 写入文件的输出流BufferedOutputStream : 缓冲输出流   //构造方法 // 创建一个向指定File对象表示的文件中写入数据的文件输出流    FileOutputStream(File file)    // 创建一个向指定File对象表示的文件中写入数据的文件输出流    FileOutputStream(File file, boolean append)    // 创建一个向具有指定名称的文件中写入数据的输出文件流    FileOutputStream(String name)    // 创建一个向具有指定name的文件中写入数据的输出文件流    FileOutputStream(String name, boolean append)

常用方法:

这里写图片描述


字符流

  • Reader字符输入流
InputStreamReader :(转换流)将字节转换到字符的输入流 ——> FileReader : 从文件读取的输入流BufferedReader : 缓冲输入字符流
  • Writer 字符输出流
OutputStreamWriter:(转换流)将字节转换到字符的输出流 ——> FileWriter: 输出到文件的输出流BufferedWriter: 缓冲输出字符流

使用详解

  • FileInputStream / FileOutputStream
public class Test {    public static void main(String[] args) {        try {            long timeMillis = System.currentTimeMillis();            InputStream is = new FileInputStream("D:/aa.apk");            OutputStream os = new FileOutputStream("D:/ec.apk");            /**             * 指定数组的大小,一次读取一个数组 之所以用1024,因为在计算机下的表示二进制,编译器你这些2的幂次方得数据处理特别快。             */            /**             * 1024*1024(是1m)和 1024*1024*1024 (10m) 这样读取文件时他们的速度为什么会比4*1024慢,影响的原因是什么             * 如果是1m或更大,这样读写时相当于先读1M在写1M,这样循环速度就慢了,但是循环次数也少了。             *              *              * 数组大在内存中长度就越大,站的内存也越大,但是循环次数减少。 数组小在内存中长度就越小,占的内存小,但是循环次数变多了。             *              *              * 数组给的太大也不好,太小也不好。所以影响读写速度的关键在于设备当前的内存和cpu来决定速度的             *              */            byte[] i = new byte[4 * 1024];// 作为一个缓冲区            int i2 = 0;            try {                while ((i2 = is.read(i)) != -1) {                    System.out.print(new String(i, 0, i2) + " ");// AB CD                    os.write(i, 0, i2);                }                is.close();                os.close();                long timeMillis1 = System.currentTimeMillis();                System.out.println(String.valueOf(timeMillis1 - timeMillis) + ">>>>>>>>>>>");            } catch (IOException e) {                e.printStackTrace();            }        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
原创粉丝点击