Java ByteArrayInputStream流
一、ByteArrayInputStream流定义
API说明:ByteArrayInputStream包含一个内部缓冲区,其中包含可以从流中读取的字节,内部计数器跟踪read方法提供的下一个字节,关闭ByteArrayInputStream流无效,关闭流后调用类的方法不会有异常产生
二、ByteArrayInputStream流实例域
protected byte buf[];
protected int pos;
protected int mark = 0;
protected int count;
三、ByteArrayInputStream流构造函数
public ByteArrayInputStream(byte buf[]) {
this.buf = buf;
this.pos = 0;
this.count = buf.length;
}
public ByteArrayInputStream(byte buf[], int offset, int length) {
this.buf = buf;
this.pos = offset;
this.count = Math.min(offset + length, buf.length);
this.mark = offset;
}
四、ByteArrayInputStream流方法
1)read()
:从此输入流中读取下一个字节并返回,当流到达末尾时,返回-1
public synchronized int read() {
return (pos < count) ? (buf[pos++] & 0xff) : -1;
}
2)read(byte b[], int off, int len)
:从输入流中读取最多len个字节到目标数组中,返回实际读取的字节数
public synchronized int read(byte b[], int off, int len) {
if (b == null) {
throw new NullPointerException();
} else if (off < 0 || len < 0 || len > b.length - off) {
throw new IndexOutOfBoundsException();
}
if (pos >= count) {
return -1;
}
int avail = count - pos;
if (len > avail) {
len = avail;
}
if (len <= 0) {
return 0;
}
System.arraycopy(buf, pos, b, off, len);
pos += len;
return len;
}
3)close()
:关闭流无效,关闭后调用其它方法不会有异常
public void close() throws IOException {
}
五、ByteArrayInputStream流的作用
暂时不理解具体作用,不清楚什么时候会用到该流,因为实际项目暂未用到,故先了解其功能即可
六、ByteArrayInputStream的用法解析
看下面这个程序,看懂了就会了
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
public class Test4 {
//ByteArrayInputStream本身操作的是一个数组,并没有打开文件描述之类的,所有不需要关闭流
public static void main(String[] args) {
ByteArrayInputStream bais=null;
StringBuilder sb=new StringBuilder();
int temp=0;
int num=0;
long date1=System.currentTimeMillis();
try{
byte[] b="abcdefghijklmnopqstuvxyz".getBytes();
//从字符数组b中读取数据,从下标为2开始计数读8个
bais=new ByteArrayInputStream(b,2,8);
while((temp=bais.read())!=-1){
sb.append((char)temp);
num++;
}
System.out.println(sb);
System.out.println("读取的字节数:"+num);
}finally{
try{
bais.close();//不需要关闭流的,但是调用close没有任何影响,close不做任何事情
}catch(IOException e){
e.printStackTrace();
}
new File("d:"+File.separator+"a.txt");//File.separator是一个文件分隔符,在windows和linux平台下运行都没有问题
}
long date2=System.currentTimeMillis();
System.out.println("耗时:"+(date2-date1));
}
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。