InputStream抽象类的三种实现
⽂件IO这块可能很多开发者没有涉及,平时的⼯作主要集中在CRUD的业务逻辑开发上,对于⾦融或者电信有些核⼼系统会⼤量使⽤⽂件IO。这⾥的⽂件主要是话单或者交易凭证,开发者需要读取这些⽂件,将⽂件的内容转为实体或者消息发送给其他的⼦系统去处理。⼤家常⽤的读取和写⼊⽂件的⽅式是⽤FileInputStream和FileOutputStream,本⽂将为⼤家带来另外两种⽂件读取的⽅式,让⼤家在写代码的时候有跟多的选择。
InputStream是⽂件读取的抽象基类,java.io包下的⽂件读取都会直接或者间接实现这个抽象类,下⾯给出⼏个常⽤的⽂件读取的类关系图:
从类关系图上看到有FileInputStream,ByteArrayInputStream,FilterInputStream三个实现类,今天主要给⼤家讲解的是FileInputStream,ByteArrayInputStream和BufferedInputStream。
FileInputStream类上的注释⾮常简单:该类从⽂件系统的某个⽂件中获取输⼊字节。抽象类的使用
FileInputStream fis = null;
File file = new File("D:/");
try {
byte[] buf = new byte[16];
int length = 0;
fis = new FileInputStream(file);
StringBuilder stringBuilder =new StringBuilder();
while ((ad(buf))!=-1){
stringBuilder.append(new String(buf, 0, length));
}
System.out.String());
} catch (FileNotFoundException fnfe){
System.out.println(fnfe);
} catch (IOException ioe) {
System.out.println(ioe);
} finally {
if(null != fis){
try {
fis.close();
} catch (IOException ioe){
System.out.println(ioe);
}
}
}
}
ByteArrayInputStream类上的注释说该类在内部维护了⼀个byte类型的数组,该数组起到缓冲区的作⽤,另外还有⼀个指向下⼀个要读字符的位置的索引。
public static void main(String[] args){
String msg = "dalddngndaa";
InputStream bis = new Bytes());
int askCode = 0;
try {
while ((ad())!=-1){
System.out.println((char)askCode);
}
} catch (IOException e) {
e.printStackTrace();
}
}
BufferedInputStream类的注释说在内部维护了⼀个buffer数组⽤来读⼊⽂件⾥的数据,额外提供了标记和重置的⽅法可以从缓存中取到上⼀次的数据。
InputStream bufis = new BufferedInputStream(fis);
byte[] buffer = new byte[8];
StringBuilder stringBuilder = new StringBuilder();
try {
while (ad(buffer, 0, buffer.length)!=-1){
for(int i=0; i<buffer.length; i++){
stringBuilder.append((char)buffer[i]);
}
System.out.String());
}
} catch (IOException e) {
e.printStackTrace();
}
}
本⽂对三种不同的输⼊流的⽤法做了详细的介绍,在使⽤上推荐使⽤BufferedInputStream,速度上⽐前两种更快。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。