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

标签: JAVA光头之路

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下载下来了。
在这里插入图片描述
下面是我以前学I/O流做的笔记。(当时上这个课偷懒,就写了这一点*_*)
在这里插入图片描述

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

版权声明:本文为chang_1996原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chang_1996/article/details/103833608

智能推荐

更改springboot启动拼成的字母

1.更改springboot启动拼成的字母 其实很好改,只需要在resources下新建一个txt文件就可以,命名为banner.txt,那这种字符该怎么拼出来呢,下面推荐一个网址,有这种工具 传送门 2.集成...

Node.js安装配置

好久都没更新博客了,今天心血来潮,决定是时候更新一篇了,首先我们来认识一下node.js。 什么是node.js? 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的...

RocketMQ之双Master集群搭建笔记记录

一:RocketMQ双master集群部署 服务器环境(我采用的虚拟机,centos6 .5【特别注意:安装的虚拟机centos系统一定得是64位的,32位的会启动不起来。即便起来了也会有很多问题,深坑勿踩】)  ip       用户名    密码        角色     模式 192.168.197.101   root        nameServer1,brokerServer1  ...

蓝桥杯试题集-基础练习题-数列特征(Java)

//做题笔记,仅自己看得懂 题目: 正确姿势:...

多线程爬取4k超高清美图壁纸

多线程爬取4k美图壁纸 前言:看完此篇文章你可以更加深入的了解多线程的使用,并且最重要的你能够下载你自己想要的超高清4k壁纸 爬取结果: 1. 分析网站 要爬取的url :http://pic.netbian.com/ a) 判断网页是动态加载还是静态加载页面。右击查看网页源代码,按Ctrl + f在源代码中搜索网站的详情页地址,从而判断整个网页是静态加载的 b) 明确爬取的目标。我们要爬取的目标...

猜你喜欢

elementUI-添加自定义图标

elementui的小图标有限,跟UI给的不一样,这个时候咋办呢?百度走起。。。。参考了两篇博主分享的 自定义elementui中的图标 和 建立图标库,这里主要用到第一种 实际中: elementUI导航栏 具体代码: 汉字转换Unicode编码: 直接打开控制台: 汉字.chatCodeAt().toString(16); 然后回车; 至于三角形的图标,我直接把箭头的 unicode 值改成了...

[Linux]——文件缓冲区

文件缓冲区 提到文件缓冲区这个概念我们好像并不陌生,但是我们对于这个概念好像又是模糊的存在脑海中,之间我们在介绍c语言文件操作已经简单的提过这个概念,今天我们不妨深入理解什么是文件缓冲区。 为什么需要文件缓冲区 当我们在程序中写下一条printf语句时,我们希望将这条语句的内容打印到屏幕上。但是如果你将语句放在循环中,难道你执行一次循环那么操作系统就要打印一次这条数据么?答案当然不是 我们对于程序...

基于FPGA的IIC协议详解——EEPROM控制器(1)

IIC协议举例 常用IIC协议使用地方 常见IIC协议的注意点 24LC64芯片读写命令的时序图 eeprom控制器的系统框图 时序图设计 代码设计 EEPROM控制器测试模块的代码 结束语 常用IIC协议使用地方 熟悉一个协议一定要知道这个协议应该用到什么地方,IIC协议作为飞利浦公司定义的一个慢速传输协议,常用于: 1、芯片寄存器的配置; 2、eeprom的读写; 本次实验我们将使用eepro...

ssm 工程简易搭建(idea 工具下)

现在都流行springboot了,大部分都给你配合了了,可以快速开发。但是今天我们回顾一下ssm的搭建,其实也挺简单的,比刚入门那会觉得简单多了。 这个先讲几点: 1.开始搭建前,idea 自己要配置maven 和tomcat和jdk ,这里就不讲了。 2.为了简化配置,我们按照“约定优于配置”的原则(这种原则在sprigboot项目里面特别明显),启动项目时,项目有个文件...

oracle简单视图read only、check option和默认权限的异同(相对于DML语句)

视图分为俩类: 简单视图:   视图所代表的sql中如果没有group by语句,   没有组函数,查询的只有一张表,那么这样的视图就是简单视图. 复杂视图   视图所代表的sql中如果有group by语句,   或者有组函数,或者查询的是多张表,那么这样的视图就是复杂视图. s_emp表格属性 默认权限 1.可以插入不满足where条件的数据,原表也会更...