当前位置: 首页 > wzjs >正文

福海网站制作4366网页游戏

福海网站制作,4366网页游戏,广东网站建设价格,个人养老保险怎么缴纳IO流的分类 文件流分为字节流和字符流。 字节流以字节为传输单位,适用于二进制文件(图片、视频等);字符流以字符为传输单位,根据不同的编码方式字符单位的大小也不同,适用于文件传输; 根据数据…

IO流的分类

  1. 文件流分为字节流字符流
  • 字节流以字节为传输单位,适用于二进制文件(图片、视频等);
  • 字符流以字符为传输单位,根据不同的编码方式字符单位的大小也不同,适用于文件传输;
  1. 根据数据的流向分为:输入流 和 输出流

  • 输入流 :把数据从其他设备上读取到内存中的流。
  • 输出流 :把数据从内存 中写出到其他设备上的流。

输入也叫做读取数据,输出也叫做作写出数据

上面这四个类衍生出一系列类,它们是最根本的,但它们都是抽象类,需要其子类来实现其方法。

PS:我们必须明确一点的是,一切文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据


字节流

字节输入流(InputStream):

java.io.InputStream抽象类是表示字节输入流的所有类的父类,可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法。


文件输入流FileInputStream:

  • FileInputStream是继承了InputStream的类,也就表明其是以字节为传输单位
  • 其作用是从文件读取数据,输出到控制台
FileInputStream的构造方法

1、 FileInputStream(File file) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
2、 FileInputStream(String name)通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名name命名。

同样的,推荐使用第二种构造方法

FileInputStream inputStream = new FileInputStream("D:\code\JavaDemo\a.txt");

当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出FileNotFoundException 。

构造举例,代码如下:

public class FileInputStreamConstructor throws IOException{public static void main(String[] args) {// 方法1:使用File对象创建流对象File file = new File("a.txt");FileInputStream fos = new FileInputStream(file);// 方法2:使用文件名称创建流对象(推荐使用)FileInputStream fos = new FileInputStream("b.txt");}
}

案例代码(利用字节数组形式): 

新建文本,名字为a,路径为D:\\code\\JavaDemo\\a.txt,内容为abcde。

package com.logindemo.IO;import java.io.FileInputStream;
import java.io.IOException;public class f1 {public static void main(String[] args) {FileInputStream fileInputStream = null;int readData=0;byte[] rData = new byte[2];int len = 0;   //记录每一轮实际读取的字节数try {//创建字节文件流对象fileInputStream = new FileInputStream("D:\\code\\JavaDemo\\a.txt");//循环读取while ((len = fileInputStream.read(rData)) != -1) {//设置字节数组,一次最多可读取2字节//读取结束后,把数组变成字符串打印出来,从下标0开始System.out.print(new String(rData, 0, len));}} catch (Exception e) {throw new RuntimeException(e);} finally {//读取完毕要关闭文件输入流try {fileInputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}

运行结果:确实是abcde~~~读取数据成功~

代码解析几点:

(1)读取字节:read()每次读取一个字节,返回该字节对应的int值,读取到文件末尾返回-1;

后面需要转成字符型打印出来。但是这种方式不太好处理中文,一个汉字可能会对应多个字节,所有更推荐数组↓

(2)使用字节数组读取public int read(byte[] b)每次读取b的长度个字节到数组中,返回该字节数组的有效数组长度,并将读取到的有效字节存储到字节数组中,后面需要把数组变成字符串打印出来。读取到末尾时,返回-1


  1. String构造器有一个是将字符数组转化为字符串,参数为(数组,起点,长度)
  2. 要设置finally以关闭IO流

补充:为什么需要len?

我们先看没有len的情况,只图中改这一行代码:

 

运行可以发现,输出的是abcded!多了一个d!显然不对!!为什么会出现这种情况?看图分析!

 所以得出结论:要通过len ,获取有效的字节!!!


文件输出流FileOutputStream:

  • FileOutputStream是OutputStream的子类,表明其是按字节进行输出
  • 其作用是向文件写入数据

FileOutputStream的构造方法:

1、 public FileOutputStream(File file):根据File对象为参数创建对象。
2、 public FileOutputStream(String name): 根据名称字符串为参数创建对象。

推荐第二种构造方法 :

FileOutputStream outputStream = new FileOutputStream("D:\code\JavaDemo\a.txt");

同样的,当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出FileNotFoundException 。

在该路径下,如果没有这个文件,会创建该文件。如果有这个文件,会清空这个文件的数据。

构造举例,代码如下:

public class FileOutputStreamConstructor throws IOException {public static void main(String[] args) {// 使用File对象创建流对象File file = new File("D:\code\JavaDemo\a.txt");FileOutputStream fos = new FileOutputStream(file);// 使用文件名称创建流对象FileOutputStream fos = new FileOutputStream("D:\code\JavaDemo\b.txt");}
}

案例代码:

新建文本,名字为b,路径为D:\\code\\JavaDemo\\a.txt,内容为abc。

package com.logindemo.IO;import java.io.FileOutputStream;
import java.io.IOException;public class f2 {public static void main(String[] args) {FileOutputStream fileOutputStream = null;String path = "D:\\code\\JavaDemo\\b.txt";try {//fileOutputStream=new FileOutputStream(path);  //这个会清空原有内容,即覆盖//设置追加而不是覆盖的写法fileOutputStream = new FileOutputStream(path, true);  //不会清空,即追加//写入单个字符//fileOutputStream.write('a');//设置一次添加多个字符String s1 = "hello";fileOutputStream.write(s1.getBytes());  //字符串转换为字节数组} catch (Exception e) {throw new RuntimeException(e);} finally {//关闭输出流try {fileOutputStream.close();} catch (IOException e) {throw new RuntimeException(e);}}}
}

运行结果:

代码解析几点:

(1)写出字节write(int b) 方法,每次可以写出一个字节数据;

(2)写出字节数组write(byte[] b),每次可以写出数组中的数据;


追加新数据:true 表示追加数据,false 表示不追加也就是清空原有数据;

write方法中接收的是char型字符或者是数组;

s1.getBytes():把字符串“hello”转换为字节数组;

补充知识:

写出指定长度字节数组write(byte[] b, int off, int len) ,每次写出从off索引开始,len个字节 

改一下原代码框的位置,加off和len的值,我们要追加从索引2开始的2个字节,hello,即ll,可以发现确实是追加了ll:

 

http://www.dtcms.com/wzjs/815104.html

相关文章:

  • 高清网站推广免费下载跨境电商平台是什么
  • 学校官方网站建设wordpress如何分版
  • 网站建设多少网站兼容代码
  • 朋友让帮忙做网站wordpress取摘要
  • 比较好的公文写作网站做pc网站软件
  • 北京市建设局网站首页昆明网站关键词优化
  • 派设计包装设计网站微信小程序的制作流程
  • 临桂住房和城乡建设局网站网站建设的团队分工
  • 微信网站开发设计WordPress如何添加表情
  • 网站设计原则的历史wordpress2.4
  • 网站做sem能够提高收录量吗google seo 优化教程
  • 天安保险公司官网广州网站优化哪家快
  • 如何建造企业网站咸宁网站建设公司
  • 现在搜什么关键词能搜到网站做阿里巴巴英文网站
  • 外贸企业网站制作seo搜索推广
  • 易思企业网站管理系统做羞羞的事情的网站
  • 网站开发设计参考文献宁浩wordpress
  • 室内设计者联盟网站浙江省建筑培训网
  • 毕业设计做网站答辩网站建设不好
  • 医疗网站建设好么石嘴山网站建设
  • 怎样做网站 app教程网站上的链接怎么做的
  • 中国住房城乡建设厅网站wordpress api 路径
  • 大连网站建设特色发布培训的免费网站模板下载
  • 深圳二次源网站建设四川省建设科技协会网站
  • 湖北网站建设哪家好中国建设工程网站投标
  • 大兴网站建设it外包人员最后什么下场
  • 厦门创意互动网站建设php企业cms
  • 上海网站建设 百家号小店面设计装修网
  • 天津网站建设 熊掌号可信网站认证购买
  • 炫酷网站设计化妆品网站建设报告