字节输入流:InputStream

类声明:

public abstract class InputStream implements Closeable

位于java.io包下,是一个抽象类.

官方对其说明:
  This abstract class is the superclass of all classes representing an input stream of bytes.
  (简单翻译:抽象类InputStream是所有字节输入流的父类)

主要方法:
  - int available();返回输入流中可读取的字符个数.
  - void close(): 关闭此输入流并释放与该流有关的系统资源.
  - void mark(int readlimit): 在此输入流中标记当前的位置.
  - boolean markSupported(): 检测此输入流是否支持mark和reset.
  - abstract int read(): 从输入流中读取数据的下一个字节.
  - int read(byte[] b): 从输入流中读取一定数量的字节,并将其存储在字节数组b中
  - int read(byte[] b,int off,int len): 从输入流中读取len个字节,并将其存储在字节数组b中off位置开始的地方
  - void reset(): 将此流重新定位到最后一次对此输入流调用mark方法时的位置.
  - long skip(long n): 跳过和丢弃此输入流中n个字节的数据.

  InputStream 是所有字节输入流的父类,其中有一个抽象方法read() 是字节输入流的核心,所有子类都必须实现此方法。
InputStream源代码分析:

 package java.io;

 /**
* 该抽象类是所有字节输入流的父类
*/
public abstract class InputStream implements Closeable { private static final int MAX_SKIP_BUFFER_SIZE = 2048;//最大允许跳过的字节个数 /*
功能: 从输入流中读取下一个字节数据,字节数据的值以0-255之间的int类型返回,如果已经到达流末尾,则返回值-1.
子类必须提供该方法的一个实现.
返回值:下一个字节数据;如果到达流的末尾则返回-1
*/
public abstract int read() throws IOException; public int read(byte b[]) throws IOException {
return read(b, 0, b.length);
} /*
功能:从输入流中读取len个字节数据,并把这些字节数据写到字节数组b中(从off位置开始写)
参数:
byte b[]: 存储从输入流中读取的字节数据
int off: 开始位置
int len: 读取的字节个数
返回值: 实际从输入流中读取到字节数组b中的字节个数
*/
public int read(byte b[], int off, int len) throws IOException { //检查字节数组b是否为null,检查off len 等参数是否数组越界
if (b == null) {
throw new NullPointerException();
} else if (off < 0 || len < 0 || len > b.length - off) {
throw new IndexOutOfBoundsException();
} else if (len == 0) {
return 0;
} //从输入流中读取第一个字节数组,并且判断输入流是否已经到达末尾
int c = read();
if (c == -1) {
return -1;
}
b[off] = (byte)c; //循环从输入流中读取len个字节数据到字节数组b中(如果循环读取过程中到达了输入流的末尾,则跳出循环不再读取)
int i = 1;
try {
for (; i < len ; i++) {
c = read();
if (c == -1) {
break;
}
b[off + i] = (byte)c;
}
} catch (IOException ee) {
}
return i;
} /*
功能: 在输入流中跳过n个字节数据
*/
public long skip(long n) throws IOException {
long remaining = n;
int nr; if (n <= 0) {
return 0;
} int size = (int)Math.min(MAX_SKIP_BUFFER_SIZE, remaining);
byte[] skipBuffer = new byte[size];
while (remaining > 0) {
nr = read(skipBuffer, 0, (int)Math.min(size, remaining));
if (nr < 0) {
break;
}
remaining -= nr;
} return n - remaining;
} /*
功能: 返回输入流中还可被读取的字节个数
*/
public int available() throws IOException {
return 0;
} /*
功能: 关闭输入流
*/
public void close() throws IOException {} /*
功能: 在输入流中标记一个位置
*/
public synchronized void mark(int readlimit) {} /*
功能: 将此流重新定位到最后一次对此输入流调用 mark 方法时的位置.
*/
public synchronized void reset() throws IOException {
throw new IOException("mark/reset not supported");
} /*
功能: 检查该输入流是否支持mark()和reset()方法
*/
public boolean markSupported() {
return false;
}
}

字节输入流:OutputStream 

类声明:

public abstract class OutputStream implements Closeable

位于java.io包下,是一个抽象类.
官方对其说明:
  This abstract class is the superclass of all classes representing an output stream of bytes.
  (简单翻译:抽象类OutputStream是所有字节输出流的父类)

主要方法:
  - void close(): 关闭此输出流并释放与该流有关的系统资源.
  - void flush(): 刷新此输出流并强制写出所有缓冲的输出字节.
  - void write(byte[] b): 将b.length个字节从指定的byte数组写入此输出流.
  - void write(byte[] b,int off,int len): 将byte数组中从off位置开始的len个字节写入此输出流.
  - abstract void write(int b): 将指定的字节写入此输出流.

  OutputStream 是所有字节输出流的父类,其中有一个抽象方法write(int b) 是字节输出流的核心,所有子类都必须实现此方法。

OutputStream源代码分析:

 package java.io;

 /*
该抽象类是所有字节输出流的父类。输出流接收输出字节并将这些字节发送到某个接收器。
*/
public abstract class OutputStream implements Closeable, Flushable { /*
功能: 将指定的数据b写入到输出流中.
*/
public abstract void write(int b) throws IOException; /*
功能:将字节数组b中的全部数据写入到此输出流中
*/
public void write(byte b[]) throws IOException {
write(b, 0, b.length);
} /*
功能: 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流
*/
public void write(byte b[], int off, int len) throws IOException {
if (b == null) {
throw new NullPointerException();
} else if ((off < 0) || (off > b.length) || (len < 0) ||
((off + len) > b.length) || ((off + len) < 0)) {
throw new IndexOutOfBoundsException();
} else if (len == 0) {
return;
} //循环写入到此输出流
for (int i = 0 ; i < len ; i++) {
write(b[off + i]);
}
} /*
功能:刷新此输出流并强制写出所缓冲的输出字节
*/
public void flush() throws IOException {
} /*
功能:关闭此输出流并释放与此流关的所系统资源
*/
public void close() throws IOException {
}
}

Java字节流:InputStream OutputStream的更多相关文章

  1. 字节流InputStream/OutputStream

    字节流InputStream/OutputStream 本篇将对JAVA I/O流中的字节流InputStream/OutputStream做个简单的概括: 总得来说,每个字节流类都有一个对应的用途, ...

  2. Java字节流在Android中的使用

    引言:项目开发有时会使用上传文件到服务器,再从服务器取数据显示到本地这一过程:或者输入一段文字,再把文字显示出来.这个过程都用到了IO流. IO流分为字符流(Reader\Writer)和字节流(In ...

  3. Java:IO流(二)——InputStream/OutputStream具体用法:FileXXXStream、ByteArrayXXXStream

    1.说明 InputStream和OutputStream是Java标准库中最基本的IO流,它们都位于java.io包中,该包提供了所有同步IO的功能. 2.模块:java.io.InputStrea ...

  4. java 字节流与字符流的区别

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...

  5. (转)java字节流和字符流的区别

    转载: http://www.cnblogs.com/dolphin0520/category/361055.html 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同 ...

  6. java字节流与字符流的区别

    1.Java的字节流: InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先. 2.Java的字符流: Reader是所有读取字符串输入流的祖先,而write ...

  7. Java字节流与字符流基本操作

    在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据时要使用输入流读取数据,而当程序需要将一些数据保存起来时,就要使用输出流. 在java.io包中流的操作主要有字节流.字符流两大类,两类都 ...

  8. 使用Java字节流拷贝文件

    本文给出使用Java字节流实现文件拷贝的例子 package LearnJava; import java.io.*; public class FileTest { public static vo ...

  9. java 字节流和字符流的区别 转载

    转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...

  10. java 字节流和字符流的区别

    转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...

随机推荐

  1. 【codevs1907】 方格取数 3

    http://codevs.cn/problem/1907/ (题目链接) 题意 N*N的方格,每个格子中有一个数,从中取出不相邻的任意个数,使得取到的数的和最大. Solution 裸的二分图带权最 ...

  2. 【poj3522】 Slim Span

    http://poj.org/problem?id=3522 (题目链接) 题意 求最小生成树的最大边与最小边差最小. Solution 排序后滑动窗口维护 代码 // poj3522 #includ ...

  3. 《ODAY安全:软件漏洞分析技术》学习心得-----shellcode的一点小小的思考

    I will Make Impossible To I'm possible -----------LittleHann 看了2个多星期.终于把0DAY这本书给看完了,自己动手将书上的实验一个一个实现 ...

  4. POJ3258 River Hopscotch

    地址 别人的代码,自己边界总是控制不好,还不知道哪里错了!思维!这种问题代码越简洁反而越不容易错吧.. #include<stdio.h> #include<algorithm> ...

  5. FZU xxx游戏(拓扑排序+暴力)

    xxx游戏 Time Limit: 1000MS     Memory Limit: 32768 KB Description 小M最近很喜欢玩XXX游戏.这个游戏很简单,仅由3个场景(分别为1.2. ...

  6. Post请求和get请求乱码方式解决

    POST提交,提交页面显示中文乱码 //设置请求的编码格式 request.setCharacterEncoding("utf-8"); //设置响应的编码格式,与第一句的编码格式 ...

  7. js实现身份证号码验证

    /*根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数 ...

  8. 电脑开启wifi功能

    在Win7下,以管理员身份启动cmd,输入以下两条命令创建虚拟Wifi,并启动Wifi.其中ssid为WiFi的名字,key为密码.C:\>netsh wlan set hostednetwor ...

  9. 谈谈 ES6 的 Promise 对象

    https://segmentfault.com/a/1190000002928371 前言 开篇首先设想一个日常开发常常会遇到的需求:在多个接口异步请求数据,然后利用这些数据来进行一系列的操作.一般 ...

  10. linux中权限的修改

    修改访问权限的linux名是:Linux访问权限的问题是这样子的:比如 d rwx rwx rwx ,d是文件所在的文件,后面有9位,分别代表不同者的权限.第一个rwx代表这文件的所有者的权限,r是r ...