java I/O流

Java I/O流简介:

为使程序设计简单明了,Java把程序的输入\输出抽象为流(Stream),而其中输入或输出的数据称为数据流.简单地说:流就是指在计算机与输入\输出之间流动的数据序列.序列中的数据可以是二进制数据,也可以是其他符合某种格式规定的特定数据,如字符流等。

按照数据的流动方向:

输入流
输出流

按照处理数据的类型:

字节流
字符流

按照流是否直接与特定的地方相连:

节点流
处理流

输入流与输出流:

按照数据流相对于处理程序的流动方向来划分。








字节流与字符流:

按处理数据的类型,流可以分为字节流与字符流,它们处理信息的基本单位分别是字节(byte)与字符(char)。四个抽象类:

InputStream 字节输入流

OutputStream字节输出流

Reader 字符输入流

Writer 字符输出流


InputStream 字节输入流:

三个基本的读方法
abstract int read() :读取一个字节数据,并返回读到的数据,如果返回-1,表示读到了输入流的末尾。
int read(byte[]b) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。
int read(byte[]b, intoff, intlen) :将数据读入一个字节数组,同时返回实际读取的字节数。如果返回-1,表示读到了输入流的末尾。off指定在数组b中存放数据的起始偏移位置;len指定读取的最大字节数。
其它方法
long skip(longn) :在输入流中跳过n个字节,返回实际跳过的字节数。
int available() :返回在不发生阻塞的情况下,可读取的字节数。
void close() :关闭输入流,释放和这个流相关的系统资源。


OutputStream字节输出流:

三个基本的写方法
abstract void write(intb) :往输出流中写入一个字节。
void write(byte[]b) :往输出流中写入数组b中的所有字节。
void write(byte[]b, intoff, intlen) :往输出流中写入数组b中从偏移量off开始的len个字节的数据。
其它方法
void flush() :刷新输出流,强制缓冲区中的输出字节被写出。
void close() :关闭输出流,释放和这个流相关的系统资源。


Reader 字符输入流:

public int read( ) 读入的字符转为int返回
public int read(char b[])
public int read(char b[], int off, int len)
public long skip(long n )
public void mark(int readlimit)
public void reset( )
public boolean markSupport( )
public void close( )


Writer 字符输出流:

public void write(int b) b的低两字节写到输出流
public void write(char b[])
public void write(char b[], int off, int len)
public void write(String s)
public void write(String s, int off, int len)
public void flush( )
public void close( )


节点流与处理流:

按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流与处理流两类。
节点流(Node Stream):可以从或向一个特定的节点直接读写数据,如FileReader。
处理流(Processing Stream):又称过滤流,是对一个已存在流的连接和封装,进而实现功能更为强大的数据读写功能。如BufferedReader

节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域。
处理流:使用节点流作为输入或输出。处理流是使用一个已经存在的输入流或输出流连接创建的。

处理流的构造方法总是要带一个其他流对象做参数
BufferedReader in1 = new BufferedReader(new FileReader(file));
BufferedReader in2 = new BufferedReader(new
InputStreamReader(new FileInputStream(file)));

I/O流的链接:

Input Stream Chain

Output Stream Chain



import java.io.*;
public class IOTestProcess {

	public static void main(String[] args) 
	{

      try {
    	  FileOutputStream fos=new FileOutputStream("cde.txt");
    	  BufferedOutputStream bos=new BufferedOutputStream(fos);
    	  DataOutputStream dos=new DataOutputStream(bos);
    	  int a=90;
    	  boolean b=false;
    	  char c='c';
    	  double d=48.796;
    	  
    	  dos.writeInt(a);
    	  dos.writeBoolean(b);
    	  dos.writeChar(c);
    	  dos.writeDouble(d);
    	  dos.flush();
    	  dos.close();
    	  
    	  
    	  FileInputStream fis=new FileInputStream("cde.txt");
    	  DataInputStream dis=new DataInputStream(fis);
    	  
    	  int e=dis.readInt();
    	  boolean g=dis.readBoolean();
    	  char f=dis.readChar(); 
    	  double h=dis.readDouble();
    	  System.out.println(e);
    	  System.out.println(f);
    	  System.out.println(g);
    	  System.out.println(h);
		
	} catch (Exception e) {
		e.printStackTrace();
	}

	}

}

import java.io.*;
public class IOTestChar {
	
	/*public static void main(String[] args) {
		try {
			FileReader fr=new FileReader("src\\IOTestChar.java");
			char[] cbuf=new char[1024];
			int len=fr.read(cbuf);
			System.out.println(new String(cbuf,0,len));
			fr.close();
			FileWriter fos=new FileWriter("abc.txt");
			fos.write(cbuf, 0, len);
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}*/

	public static void main(String[] args) {
		try {
			FileInputStream fis=new FileInputStream("e:\\android\\Earth.bmp");
			byte[] buf=new byte[fis.available()];
			int len=fis.read(buf);
			System.out.println(new String(buf,0,len));
			fis.close();
			FileOutputStream fos=new FileOutputStream("1.bmp");
			fos.write(buf, 0, len);
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}


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

智能推荐

更改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条件的数据,原表也会更...