java IO 字节流详解

1. 如何理解输入输出流?
这是我当初在学习Java IO这一块很难理解的一块,输入输出流我们可必须以一个为参照物:我们以内存为参照物,凡是写入内存的我们叫输入流,从内存中写出的我们叫输出流。看下面的示例图
有了这样的一个概念对于我们再学习Java中的IO流我相信就会变得特别简单了。
2. 再看流的分类
流的分类,Java的流分类比较丰富,刚接触的人看了后会感觉很晕。流分类的方式很多:
1、按照输入的方向分,输入流和输出流,输入输出的参照对象是Java程序。(InputStream OutPutStream)
2、按照处理数据的单位不同分,字节流和字符流,字节流读取的最小单位是一个字节(1byte=8bit),而字符流一次可以读取一个字符(1char = 2byte = 16bit)。(InputStream Reader)
3、按照功能的不同分,分节点流和处理流,节点流是直接从一个源读写数据的流(这个流没有经过包装和修饰),处理流是在对节点流封装的基础上的 一种流,FileInputStream是一个接点流,可以直接从文件读取数据,但是BufferedInputStream可以包装 FileInputStream,使得其有缓冲功能。(FileInputStream BufferedInputStream)
其实除了以上三种分类外,还有一些常常听到的一些分类比如:对象流、缓冲流、压缩流、文件流等等。其实都是节点流和处理流的子分类。当然你也可以创建新的流类型,只要你需要。
3. 字节流:
字节流主要操作byte类型数据,以byte数组为准,主要操作类有InputStream(字节输入流)、OutputSteam(字节输出流)由于IputStream和OutputStream都是抽象类,所要要用这两个类的话,则首先要通过子类实例化对象。下面就是这两个类的一些子类结构图
1) 字节输出流:OutputStream
OutputStream是一个抽象类,要想使用它,必须通过子类来实例化它。
OutputStream类的常用方法
|
方法名称 |
描述 |
|
public void close() throws IOException |
关闭输出流 |
|
public void flush() throws IOException |
刷新缓冲区 |
|
public void write(byte[] b) throws IOException |
将一个byte数组写入数据流 |
|
public void write(byte[] b,int off,int len) throws IOException |
将一个指定范围的byte数组写入数据流 |
|
public abstract void write(int b) throws IOException |
将一个字节数据写入数据流 |
实例1:Helloworld从HelloWorld开始
功能:(向一个名为”hello.txt”的文本文件中写一个“HelloWorld”)
public static void main(String[] args) throws Exception {
// 创建一个以当前工程目录下的名为“helloworld.txt”的文本文件
File file = new File("hellowolrd.txt");
OutputStream outputStream = null;
// 通过FileOutPutStream的子类实例化OutputStream对象
outputStream = new FileOutputStream(file);
// 声明一个字符串
String str = "hello,world";
// 将字符串转换成字节数组
byte[] b = str.getBytes();
// 写入数据
outputStream.write(b);
// 关闭输出流
outputStream.close();
outputStream.flush();
}
我们可以看到当前工程目录下已经有一个helloworld.txt且里面已经有数据,如果我们把str的值改变的话,文本文件里的数据也会改变,所以我们想是不是可以不删除原来的数据,在追尾上追加上。
我们只要在构造FileOutputStream对象的时候选择另一种构造方法就可以了
FileOutputStream(File file,boolean append)
第二个参数就是是否采用追加的方式写入到文本文件中
把上面的代码修改下就可以了
outputStream = new FileOutputStream(file,true);
再从例子1我们理解我们对输入输出流的理解,在这个例子里,我们声明的字符串肯定是在内存中的,现在我们要从内存中把数据写到文本中,所以我们用到输出流。这也正符合了我对输入输出流的理解,当然大家肯定还有其他的理解方式。
2) 字节输入流:InputStream
InputStream类的常用方法
|
方法名称 |
描述 |
|
public void avaliable() throws IOException |
可以取得输入文件的大小 |
|
public void close() throws IOException |
关闭输入流 |
|
public abstract int read() throws IOException |
读取内容,以数字的方式读取 |
|
public int read (byte b) throws IOException |
将内容读到byte数组,同时返回读入的个数 |
与OutputStream类一样,InputStream本身也是一个抽象类,要想使用它,也必须依靠其子类。
实例2:还是HelloWorld
在上一个例子的基础上我们从文本中读取数据并且把它显示在控制台上
public static void main(String[] args) throws Exception {
// 创建一个以当前工程目录下的名为“helloworld.txt”的文本文件
// 这个文件在上一个例子里已经创建,并且里面已有数据
File file = new File("hellowolrd.txt");
// 声明InputStream对象
InputStream inputStream = null;
// 通过FileInputStream子类实例化InputStream对象
inputStream = new FileInputStream(file);
// 声明一个字节数组用以接收读入的数据
byte[] b = new byte[1024];
// 开始读入数据,将数据内容读到此数组中
inputStream.read(b);
// 关闭输入流
inputStream.close();
// 在控制台打印
System.out.println(new String(b));
}
如果以这种方式打印,我们可以看到虽然控制台里是打印出了文本文件中的内容,但是后面跟了很多空格,这是我们不需要的,对于这种情况我们有两种解决方式
方式一:声明字节数组的时候指定字节数组的长度为文本内容的长度
byte[] b=new byte[(int)file.length()];
方式二:在将字节数组转换成字符串的调用String(byte b,int off,int len)这个构造函数
System.out.println(new String(b,0,(int)file.length()));
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# java
# IO
# 字节流
# 字节流详解
# Java编程中字节流与字符流IO操作示例
# Java中IO流 字节流实例详解
# Java文件(io)编程_文件字节流的使用方法
# 【Java IO流】字节流和字符流的实例讲解
# 详解Java中IO字节流基本操作(复制文件)并测试性能
# Java字节流和字符流总结IO流!
# Java 超详细讲解IO操作字节流与字符流
# Java I/O (Input/Output)文件字节流举例详解
# 子类
# 文本文件
# 是一个
# 都是
# 基础上
# 这两个
# 要想
# 可以看到
# 在上
# 转换成
# 目录下
# 抽象类
# 创建一个
# 读到
# 就可以
# 的人
# 这是
# 这一
# 就会
# 是在
相关文章:
如何解决VPS建站LNMP环境配置常见问题?
如何配置FTP站点权限与安全设置?
做企业网站制作流程,企业网站制作基本流程有哪些?
已有域名和空间如何快速搭建网站?
建站之星如何助力网站排名飙升?揭秘高效技巧
网站企业制作流程,用什么语言做企业网站比较好?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
长沙做网站要多少钱,长沙国安网络怎么样?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
Swift中switch语句区间和元组模式匹配
如何选择高效可靠的多用户建站源码资源?
如何通过NAT技术实现内网高效建站?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
如何在Golang中使用replace替换模块_指定本地或远程路径
想学网站制作怎么学,建立一个网站要花费多少?
,交易猫的商品怎么发布到网站上去?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
高端建站如何打造兼具美学与转化的品牌官网?
西安大型网站制作公司,西安招聘网站最好的是哪个?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
如何快速辨别茅台真假?关键步骤解析
如何在宝塔面板中创建新站点?
如何在IIS中配置站点IP、端口及主机头?
Thinkphp 中 distinct 的用法解析
,sp开头的版面叫什么?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
如何在腾讯云服务器上快速搭建个人网站?
如何在阿里云域名上完成建站全流程?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
如何在橙子建站上传落地页?操作指南详解
详解jQuery中基本的动画方法
如何有效防御Web建站篡改攻击?
如何在IIS服务器上快速部署高效网站?
MySQL查询结果复制到新表的方法(更新、插入)
c# 在ASP.NET Core中管理和取消后台任务
中山网站制作网页,中山新生登记系统登记流程?
如何在万网主机上快速搭建网站?
ui设计制作网站有哪些,手机UI设计网址吗?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
微信h5制作网站有哪些,免费微信H5页面制作工具?
营销式网站制作方案,销售哪个网站招聘效果最好?
如何通过主机屋免费建站教程十分钟搭建网站?
网站制作公司,橙子建站是合法的吗?
代刷网站制作软件,别人代刷火车票靠谱吗?
制作网页的网站有哪些,电脑上怎么做网页?
*请认真填写需求信息,我们会在24小时内与您取得联系。