欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA光头之路(八)--I/O流

程序员文章站 2022-03-10 16:53:19
...

I/O流的概念

IO流就是计算机中不同存储设备(例如磁盘文件,内存等)之间的数据流(输入输出操作)。

IO流主要包含:
字节流-文件输入流(FileInputStream)
字节流-文件输出流(FileOutputStream)
字符流-文件输入流(FileReader)
字符流-文件输出流(FileWriter)

①字节流:

InputStream 与 OutputStream;

InputStream 是所有字节输入流的父类,其定义了基础的读取方法;

OutputStream 是所有字节输出流的父类,其定义了基础的写出方法包含:文件流:FileOutputStream 是文件的字节输出流,我们使用该流可以以字节为单位将数据写入文件(默认覆盖模式,第二个参数设施为 true 可改变为追加模式)。FileInputStream 是文件的字节输入流,我们使用该流可以以字节为单位读取文件内容。

缓冲流:BufferedOutputStream 缓冲字节输出流,需使用flush方法将缓存的字节写出或者在关闭流时一次性写出。BufferedInputStream 是缓冲字节输入流。

对象流:ObjectOutputStream 是用来对对象进行序列化的输出流。ObjectInputStream 是用来对对象进行反序列化的输入流。

②字符流:Reader 和 Writer;

Reader 是所有字符输入流的父类。

Writer 是所有字符输出流的父类。

字符流是以字符 (char) 为单位读写数据的。一次处理一个 unicode。字符流都是高级流,其底层都是依靠字节流进行读写数据的。

包含:转换流:InputStreamReader:字符输入流,使用该流可以设置字符集 OutputStreamWriter:字符输出流,使用该流可以设置字符集字符缓冲流:PrintWriter 具有自动行刷新的缓冲该字符输出流,需第二个参数设置为 true。

BufferedReader 是缓冲字符输入流;

注::PrintWriter 写出字符串时我们通常不使用 Writer 提供的 write( ) 相关方法,而是使用重载的 print 和println 方法。

BufferedReader 读取字符串时可以使用 readLine( ) 连续读取一行字符串,直到读取到换行符为止,返回的字符串中不包含该换行符,未读到返回 null。

③序列化流:ObjectInputStream和ObjectOutputStream;

对象的输出流将指定的对象写入到文件的过程,就是将对象序列化的过程,对象的输入流将指定序列化好的文件读出来的过程,就是对象反序列化的过程。既然对象的输出流将对象写入到文件中称之为对象的序列化,那么可想而知对象所对应的class必须要实现Serializable接口。

I/O流下载图片

io流作用是输入输出,平常最常用的地方就是上传下载了,话不多说,看代码。

package oop;

import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;


public class DownloadPictureController {
    public static void main(String[] args) {
        String url = "https://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png";  //图片的url地址
        String path="e:/download/1.jpg";        //设置图片存放位置
        downloadPicture(url,path);   //调用下载图片的方法
    }
    //下载图片的方法
    private static void downloadPicture(String urlList,String path) {
        URL url = null;
        try {
            url = new URL(urlList);
            DataInputStream dis = new DataInputStream(url.openStream());   //打开链接

            FileOutputStream fos = new FileOutputStream(new File(path));     //文件地址
            ByteArrayOutputStream bos = new ByteArrayOutputStream();    //输出的文件流

            byte[] buffer = new byte[1024];     //读取到的数据长度
            int length;

            while ((length = dis.read(buffer)) > 0) {
                bos.write(buffer, 0, length);      //读取图片
            }
            fos.write(bos.toByteArray());      //将图片写入到指定地址

            dis.close();         //清空流
            fos.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


我这里的图片url地址是百度logo的url地址,下载的图片是存放在e盘的download文件夹下,运行程序之后打开找到这个文件夹就能成功将百度的logo下载下来了。
JAVA光头之路(八)--I/O流
下面是我以前学I/O流做的笔记。(当时上这个课偷懒,就写了这一点*_*)
JAVA光头之路(八)--I/O流

今日份:
千山鸟飞绝,万径人踪灭;
孤舟蓑笠翁,独钓寒江雪。

相关标签: JAVA光头之路