[Java开发之路](8)输入流和输出流
abstract int read()
在设计详细的输入流时,必须覆盖这种方法以提供适用的功能。比如,在FileInputStream类中,这种方法将从某个文件里读入一个字节。
abstract void write(int b)
假设一个应用程序打开了过多的流而没有关闭,那么系统资源将被耗尽。关闭一个输出流的同一时候还会冲刷用于该输出流的缓冲区:全部被暂时置于缓冲区中,以便用更大的包的形式传递的字符在关闭输出流时都将被送出。假设不关闭文件,那么写出的字节的最后一个包可能将永远也得不到传递。我们能够使用flush方法觉得的冲刷这些输出。
在java.io包中有四个基本类:InputStream、OutputStream及Reader、Writer类,它们分别处理字节流和字符流。
| 输入/输出 | 字节流 | 字符流 |
| 输入流 | InputStream | Reader |
| 输出流 | OutputStream | Writer |
Reader和Writer类的基本方法与InputStream和OutputStream中的方法类似。

继承自InputStream 的流都是向程序中输入数据的,且数据单位为字节(8bit);
| 经常用法 | 描写叙述 |
| public abstract int read( ) |
从输入流中读取下一个字节数据。
返回字节使用高位补0的int类型值表示(0-255),若返回值为-1说明没有读取到不论什么字节,输入流达到尽头。 |
| public int read(byte b[ ]) |
从输入流中读取b.length个字节的数据放到字节数组b中。
返回值是读取的字节数。 假设字节数组的长度为0,不会读取不论什么字节数据。返回0,否则至少尝试去读取一个字节的数据。假设没有获取到字节数据,表示流到达文件末尾,返回-1。第一个读取的字节存储在b[0],以此类推。 |
| public int read(byte b[ ], int off, int len) |
从输入流中读取至多len个字节的数据放到字节数组b中。
返回值是读取的实际字节数。假设字节数组的长度为0,不会读取不论什么字节数据,返回0。否则至少尝试去读取一个字节的数据。 假设没有获取到字节数据,表示流到达文件末尾,返回-1。 第一个读取的字节存储在b[off],下一个存储在b[off+1],以此类推。 |
| public int available( ) |
返回输入流中能够读取的字节数。
注意:若输入堵塞,当前线程将被挂起,假设InputStream对象调用这种方法的话,它仅仅会返回0。这种方法必须由继承InputStream类的子类对象调用才实用。 注意:尽管非常多InputStream的实现类能够正确的返回输入流的总字节数。可是并非全都都能够。所以使用这种方法的返回值去分配字节大小来容纳输入流的全部数据一定不是一个正确的方法。 |
| public long skip(long n) | 忽略输入流中的n个字节,返回值是实际忽略的字节数, 假设为负数。表示没有跳过不论什么字节数据。 |
| public int close( ) | 关闭输入流。释放分配给输入流的系统资源。 |

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
- 字节数组
- String对象
- 文件
- "管道"。工作方式与实际管道相似,从一端进入,从一端输出
- 一个由其它种类的流组成的序列,以便我们能够将它们收集合并到一个流内
另外。FilterInputStream也属于一种InputStream。为"装饰器"类提供基类,当中"装饰器"类能够把属性或实用的接口与输入流连接在一起。
| 类 | 功能 |
| ByteArrayInputStream | 同意将内存中缓冲区当做InputStream使用 |
| StringBufferInputStream | 将String转换成InputStream |
| FileInputStream | 用于从文件里读取信息 |
| PipedInputStream | 产生用于写入相关PipedOutputStream的数据。实现“管道化”概念。 |
| SequenceInputStream | 将两个或者多个InputStream对象转换成单一InputStream |
| FilterInputStream | 抽象类,作为“装饰器”的接口。当中,“装饰器”为其它的InputStream类提供实用的功能。 |
| 经常用法 | 描写叙述 |
| public abstract void write(int b) |
将指定字节写入到输出流中。通常是将參数b的低八位(一个字节)写入到输出流中。
b的高八位被忽略掉。 |
| public void write(byte[] b) | 从字节数组b中向输出流中写入b.length个字节数据。 |
| public void write(byte[] b,int off,int len) | 从字节数组b偏移位置为off的開始位置向输出流写入len个字节数据。b[off]是第一个被写入的字节。b[off+len-1]是最后一个被写入的字节。假设b为null。会抛出NullPointer异常。假设off或者len是负数,或者off+len比字节数组b的长度大,则会抛出IndexOutOfBoundsException异常。 |
| public void flush() | 清空输出流,并强制将全部缓冲的输出字节被写出。 |
| public void close() | 关闭输出流,释放分配给输出流的系统资源。 |

| 类 | 功能 |
| ByteArrayOutputStream | 在内存中创建缓冲区。全部送往“流”的数据都要放置在此缓冲区。 |
| FileOutputStream | 用于将信息写至文件。 |
| PipedOutputStream | 不论什么写入当中的信息都会自己主动作为PipedInputStream的输出。实现“管道化”概念。 |
| FilterOutputStream | 抽象类,作为“装饰器”的接口。当中。“装饰器”为其它的OutputStream类提供实用的功能。 |
为了实现这个目标。我们要用到"适配器"(adapter)类:InputStreamReader能够把InputStream转换为Reader,而OutputStream能够把OutputStream转换为Writer。
老的IO流继承层次结构仅仅能支持8位字节流,而且不能非常好的处理16位的Unicode字符。
设计它的目的就是为了在全部的IO操作中都支持Unicode。



| 构造方法 | 描写叙述 |
| FileInputStream(String name) | 使用由name字符串指定路径名文件创建FileInputStream对象 |
| FileInputStream(File file) | 使用由file对象指定路径名的文件创建FileInputStream对象 |
// FileInputStream(String name)String path = "D:\\Recommended system.txt";FileInputStream stream = new FileInputStream(path);// FileInputStream(File file)File file = new File(path);FileInputStream stream2 = new FileInputStream(file);
- 用于读取诸如图像数据之类的原始字节流。(要读取字符流。请考虑使用 FileReader)
- 包括其它一些输入流,它将这些流用作其基本数据源。它能够直接数据传输或提供一些额外的功能。
- 类本身仅仅是简单地重写那些将全部请求传递给所包括输入流的 InputStream 的全部方法。
- 其子类可进一步重写这些方法中的一些方法,而且还能够提供一些额外的方法和字段。
package com.qunar.io;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;public class IOUtil {public static void main(String[] args) {try {String path = "D:\\demo.txt";FileInputStream stream = new FileInputStream(path);int num = 100;byte[] buff = new byte[num];while((stream.read(buff,0,num)) != -1){System.out.println("NewLine->"+new String(buff));}//whilestream.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
|
NewLine->My father was a self-taught mandolin player. He was one of the best string instrument players in our
NewLine-> town. He could not read music, but if he heard a tune a few times, he could play it. When he was yo
NewLine->unger, he was a member of a small country music band. They would play at local dances and on a
NewLine->ccasions would play for the local radio station. He often told us how he had auditioned and earned a
NewLine-> position in a band that featured Patsy Cline as their lead singer. He told the family that after he
NewLine-> was hired he never went back. Dad was a very religious man. He stated that there was a lot of drink
NewLine->ing and cursing the day of his audition and he did not want to be around that type of environment.nk
|

| 构造函数 | 描写叙述 |
| FileOutputStream(String name) | 使用由name字符串指定路径名的文件创建一个新的文件输出流。 |
| FileOutputStream(String name,boolean append) | 使用由name字符串指定路径名的文件创建一个新的文件输出流。假设append參数为true。那么数据将被加入到文件末尾,而具有同样名字的已有文件不会被删除(末尾加入数据)。否则这种方法删除全部具有同样名字的已有文件。 |
| FileOutputStream(File file) | 使用由file对象指定路径名的文件创建一个新的文件输出流。 |
| FileOutputStream(File file,boolean append) | 使用由file对象指定路径名的文件创建一个新的文件输出流。假设append參数为true。那么数据将被加入到文件末尾,而具有同样名字的已有文件不会被删除(末尾加入数据);否则这种方法删除全部具有同样名字的已有文件。 |
package com.qunar.io;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class IOUtil {public static void main(String[] args) {try {String path = "D:\\from.txt";String path2 = "D:\\to.txt";FileInputStream inputStream = new FileInputStream(path);FileOutputStream outputStream = new FileOutputStream(path2);int num = 100;byte[] buff = new byte[num];// 由文件写至内存while((inputStream.read(buff,0,num)) != -1){// 由内存写至文件里outputStream.write(buff);}//whileinputStream.close();outputStream.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
package com.qunar.io;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class IOUtil {public static void main(String[] args) {try {String path = "D:\\to.txt";// 向文件写入操作FileOutputStream outputStream = new FileOutputStream(path);DataOutputStream dataOutputStream = new DataOutputStream(outputStream);// 向文件里写入一个Int值dataOutputStream.writeInt(10);// 向文件里写入一个Double值dataOutputStream.writeDouble(0.98);// 向文件里写入一个Long值dataOutputStream.writeLong(12l);// 向文件里写入一个UTF-8编码值dataOutputStream.writeUTF("我来自西安电子科技大学");//从文件读取操作FileInputStream inputStream = new FileInputStream(path);DataInputStream dataInputStream = new DataInputStream(inputStream);// 从文件里读取一个Int值System.out.println("从文件里读取一个Int值:" + dataInputStream.readInt());// 从文件里读取一个Double值System.out.println("从文件里读取一个Double值:" + dataInputStream.readDouble());// 从文件里读取一个Long值System.out.println("从文件里读取一个Long值:" + dataInputStream.readLong());// 从文件里读取一个UTF-8编码值System.out.println("从文件里读取一个UTF-8编码值:" + dataInputStream.readUTF());} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
|
从文件里读取一个Int值:10
从文件里读取一个Double值:0.98
从文件里读取一个Long值:12
从文件里读取一个UTF-8编码值:我来自西安电子科技大学 |
。
。
[Java开发之路](8)输入流和输出流的更多相关文章
- java开发知识IO知识之输入输出流以及文件
目录 java开发知识IO知识之输入输出流以及文件 一丶流概述 二丶输入流讲解 InputStream类. 1. 输入流以及类层次结构 2.文件操作.使用输入流读取 三丶输出流 OutputStrea ...
- 牛客网Java刷题知识点之输入流、输出流、字节流、字符流、字节流的抽象基类(InputStream、OutputStream)、字符流的抽象基类(Reader、Writer)、FileWriter、FileReader
不多说,直接上干货! IO流用来处理设备之间的数据传输. java对数据的操作是通过流的方式. java用于操作流的对象都在IO包中. IO流按操作数据分为两种:字节流和字符流. IO流按流向分为:输 ...
- Java的IO流以及输入流与输出流的异同
一:流的基本概念: Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.J ...
- [Java开发之路](23)装箱与拆箱
1. 简单介绍 大家对基本数据类型都很熟悉.比如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性,比方基本类型不能调用方法.功能简单. ..,为了让基本 ...
- [Java开发之路](7)RandomAccessFile类具体解释
RandomAccessFile适用于大小已知的记录组成的文件.提供的对文件訪问.既能够读文件.也能够写文件,而且支持随机訪问文件.能够訪问文件的任何位置. 文件里记录的大小不一定都同样.仅仅要我们知 ...
- [Java开发之路](6)File类的使用
1. 构造方法 构造方法 描写叙述 File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建一个新的文件实例. File(String parent , String ...
- [Java开发之路](9)对象序列化与反序列化
1. 对象序列化 当你创建对象时.仅仅要你须要.它会一直存在,可是程序终止时,不管何时它都不会继续存在.虽然这样做是很有意义的,可是在某些情况下.假设程序不执行时扔能存在而且保存其信息,那将对我们很实 ...
- [Java开发之路](16)学习log4j日志
1. 新建一个Javaproject.导入Jar包(log4j-1.2.17.jar) Jar包下载地址:点击打开链接 2. 配置文件:创建并设置log4j.properties # 设置 log4j ...
- [Java开发之路](15)注解
1. 简单介绍 注解(也被称为元数据),为我们在代码中加入信息提供了一种形式化的方法. 注解在一定程度上是把元数据与源码文件结合在一起,而不是保存在外部文档中这一大趋势之下所催生的. 它能够提供用来完 ...
随机推荐
- JAVA实现网页快照,存为图片格式
原文:http://blog.csdn.net/java2000_net/article/details/3643528 截取的google的效果,将就吧,不是特别好. 但是作为普通的应用,我想这个效 ...
- Xcode 5 单元测试(一)使用XCTest进行单元测试
在Objc.io #1的Testing View Controllers中讲解的就是单元测试的相关内容.本文说下如何通过Xcode 5中集成的XCTest框架进行简单的单元测试. 什么是单元测试 首先 ...
- Ubuntu14.04进行配置符号链接arm-2009q3.tar.bz2
进入系统终端:cd /usr/local/ 创建文件夹arm:并进去arm,将winshare共享文件夹里面的文件/arm-2009q3复制到arm文件夹中; tar -jxvf arm-2009q ...
- S5PV210之内外存学习
RAM,内部存储器,用来运行程序(DRAM,SRAM,DDR) ROM,外部存储器,存储数据.程序(硬盘,FLASH等) 内存:SRAM,静态内存,容量下,价格高,不需要初始化,上电后直接使用 DRA ...
- 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形 【转】
http://blog.csdn.net/xiajun07061225/article/details/7628146 以前都是用Cg的,现在改用GLSL,又要重新学,不过两种语言很多都是相通的. 下 ...
- Mac安装pstree
brew install pstree pstree(选项) -a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示: -c:不使用精简标示法: -G:使用VT100终端机的列绘图字符: -h ...
- 【Consul】 分布式环境中的服务注册和发现利器
参考资料: http://www.cnblogs.com/shanyou/p/4695131.html http://blog.csdn.net/viewcode/article/details/45 ...
- RedHat虚拟机相关操作
在VM虚拟机中安装完Redhat系统之后 如果需要用secureCRT连接linux系统的话 操作步骤如下: 1.进入linux系统,在终端输入ifconfig(注意,不是windows的ipconf ...
- ECSHOP热门搜索关键词随机显示
实现ECSHOP热门搜索关键词随机显示,需要修改ECSHOP模板和ECShOP程序,按照步骤修改即可. 一.打开 include/lib_main.php 文件,找到下面这段代码,删除之(大概在165 ...
- Android面试题3之描写叙述下Android的系统架构
描写叙述下Android的系统架构: Android系统从下往上分为Linux内核层(linux kerner),执行库(runtime library),应用程序框架层,应用程序层 linuxker ...