阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第16章:字节流与字符流:课时74:InputStream字节输入流
程序员文章站
2022-04-15 11:36:44
...
InputStream字节输入流
与OutputStream类对应的一个流就是字节输入流,InputStream类主要实现的就是字节数据读取,该类定义如下:
public abstract class InputStream implements Closeable
在InputStream类中定义有如下的几个核心方法:
No. | 方法名称 | 类型 | |
---|---|---|---|
1 | public abstract int read() throws IOException | 普通 | 读取单个字节数据,如果数据已经读取到底了,返回-1 |
2 | public int read(byte[] b) throws IOException | 普通 | 读取一组字节数据,返回的是读取的个数,如果没有数据已经读取到底则返回-1 |
3 | public int read(byte b[], int off, int len) throws IOException | 普通 | 读取一组字节数据(只占数组的部分) |
InputStream类属于抽象类,这时应该依靠他的子类来实例化对象,如果要从文件读取一定使用FileInputStream子类,对于子类而言只关心父类对象实例化,构造方法:public FileInputStream(File file) throws FileNotFoundException
范例:读取数据
package cn.mldn.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "hello" + File.separator + "mldn.txt") ;
InputStream input = new FileInputStream(file);
byte data [] = new byte [1024] ; // 开辟一个缓冲区读取数据
int len = input.read(data); // 读取数据,数据全部保存在字节数组之中,返回读取个数
System.out.println("【" + new String(data, 0 , len) + "】");
input.close();
}
}
对于字节输入流来说,最为麻烦的问题就在于:使用Read方法读取的时候,只能以字节数据为主进行接收
特别需要注意的是从JDK1.9开始在InputStream类中增加了一个新方法:public byte[] readAllBytes() throws IOException;
范例:新方法
package cn.mldn.demo;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "hello" + File.separator + "mldn.txt") ;
InputStream input = new FileInputStream(file);
byte data [] = input.readAllBytes(); // 读取全部数据
System.out.println("【" + new String(data) + "】");
input.close();
}
}
如果你现在要读取的内容很大,那么这种读取直接搞死你的程序。
上一篇: ServiceFramework:效率堪比Rails的超敏捷Java开发框架
下一篇: python异常的捕获处理 try-except-else-finally return语句和异常处理问题 传递性主动抛出异常 自定义异常类 常见异常汇总 traceback模块 异常信息写入日志文件
推荐阅读
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第24章:反射与简单Java类:课时111:单级属性赋值
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第18章: 输入与输出支持:课时84:打印流
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第22章:反射应用案例:课时102:反射与工厂设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第16章:字节流与字符流:课时75:Writer字符输出流
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第26章:反射与代理设计模式:课时118:动态代理设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第23章:反射与类操作:课时105:反射调用构造方法(含关系图-重要)
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第17章: IO操作深入:课时82:管道流
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第24章:反射与简单Java类:课时110:属性自动赋值实现思路
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第1章:Java多线程编程:课时5:Thread与Runnable关系
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第16章:字节流与字符流:课时76:Reader字符输入流