读取/写入

如果要将数据从来源读取,可以使用输入串流:java.io.InputStream
如果要将数据写入目的地,可以使用输出串流:java.io.OutputStream
这两个类都操作了java.io.Closeable接口,其父接口为java.io.AutoCloseable,
所以可以使用JDK7的自动关闭语法

文件流

FileInputStream  FileOutputStream  

字节流

ByteArrayInputStream ByteArrayOutputStream

打包器类

InputStream OutputStream 提供串流基本操作,
如果想要对输入输出的数据做加工处理,则可以使用打包器类
1.具备缓冲区作用的 BufferedInputStream BufferedOutputStream
2.具备数据转换作用的 DataInputStream  DataOutputStream
3.具备对象串化能力的 ObjectInputStream ObjectOutputStream

字符处理

抽象化字符数据的读取来源 java.io.Reader
抽象化字符数据写出目的地 java.io.Writer
FileReader FileWriter可以对文档做读取与写入,读取或写入时会使用操作系统默认的编码来做字符转换
在启动JVM时,可以使用 -Dfile.encoding来指定编码
package com.leo;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;

/** * @ClassName: Main * @Author: Leo * @Description: * @Date: 2019/4/27 20:58 */
public class Main {
    public static void main(String[] args) {
        try {
            //文件读写
            //dump(new FileInputStream("F:/0.txt"), new FileOutputStream("F:/1.txt"));
            //网页读写
            URL url = new URL("http://www.baidu.com");
            InputStream in = url.openStream();
            OutputStream out = new FileOutputStream("F:/baidu.html");
            dump(in, out);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void dump(InputStream in, OutputStream out) throws IOException {
        //尝试自动关闭资源语法 JDK7 新增的功能
        try (InputStream inputStream = in; OutputStream outputStream = out) {
            byte[] bytes = new byte[1024];
            int length;
            while ((length = inputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, length);
            }
        }
    }
}