首页 > 编程语言 >Java 基础IO

Java 基础IO

时间:2024-07-16 09:57:46浏览次数:16  
标签:字符 Java 字节 基础 IO FileInputStream 配料 装饰

目录

如何从数据传输方式理解IO流?

# 如何从数据操作上理解IO流?

# Java IO设计上使用了什么设计模式?


如何从数据传输方式理解IO流?

从数据传输方式或者说是运输方式角度看,可以将 IO 类分为:

  1. 字节流, 字节流读取单个字节,字符流读取单个字符(一个字符根据编码的不同,对应的字节也不同,如 UTF-8 编码中文汉字是 3 个字节,GBK编码中文汉字是 2 个字节。)
  2. 字符流, 字节流用来处理二进制文件(图片、MP3、视频文件),字符流用来处理文本文件(可以看做是特殊的二进制文件,使用了某种编码,人可以阅读)。

字节是给计算机看的,字符才是给人看的

  • 字节流

  • 字符流

  • 字节转字符

# 如何从数据操作上理解IO流?

从数据来源或者说是操作对象角度看,IO 类可以分为:

# Java IO设计上使用了什么设计模式?

装饰者模式: 所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。

  • 装饰者举例

设计不同种类的饮料,饮料可以添加配料,比如可以添加牛奶,并且支持动态添加新配料。每增加一种配料,该饮料的价格就会增加,要求计算一种饮料的价格。

下图表示在 DarkRoast 饮料上新增新添加 Mocha 配料,之后又添加了 Whip 配料。DarkRoast 被 Mocha 包裹,Mocha 又被 Whip 包裹。它们都继承自相同父类,都有 cost() 方法,外层类的 cost() 方法调用了内层类的 cost() 方法。

  • 以 InputStream 为例
    • InputStream 是抽象组件;
    • FileInputStream 是 InputStream 的子类,属于具体组件,提供了字节流的输入操作;
    • FilterInputStream 属于抽象装饰者,装饰者用于装饰组件,为组件提供额外的功能。例如 BufferedInputStream 为 FileInputStream 提供缓存的功能。

实例化一个具有缓存功能的字节流对象时,只需要在 FileInputStream 对象上再套一层 BufferedInputStream 对象即可。

FileInputStream fileInputStream = new FileInputStream(filePath);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

DataInputStream 装饰者提供了对更多数据类型进行输入的操作,比如 int、double 等基本类型。

标签:字符,Java,字节,基础,IO,FileInputStream,配料,装饰
From: https://blog.csdn.net/qq_63353796/article/details/140457683

相关文章

  • 木舟0基础学习Java的第十八天(IO流,字节流,字符流,缓冲)
    IO流正常使用流程:1.抛异常 2.资源读写 3.关闭资源(从后往前关)字节流:(拷贝推荐使用)开发中一般不会抛出异常用try{}catch(){}也不推荐字节流读中文FileInputStream:读FileInputStreamfs=newFileInputStream("e:/b.txt");//11111111为-1的补......
  • 木舟0基础学习Java的第十七天(File类使用,IO流)
     File类(路径):文件路径文件夹路径路径:1.绝对路径:固定的路径从盘符开始2.相对路径:相对于某个位置指当前项目下创建功能:Filef=newFile("e:/a.txt");try{booleanb1=f.createNewFile();//新建文件System.out.println(b1);......
  • optional
    作用:用来包装一个可能存在也可能不存在的值当存在时我们可以选择返回其中内容,不存在时返回空;代码示例:#include<iostream>#include<optional>#include<string>#include<fstream>std::optional<std::string>ReadFileAsString(conststd::string&filepath){std::i......
  • Regularized Stochastic Learning and Online Optimization
    目录概符号说明MotivationFOBOS(Forward-BackwardSplitting)RDA(RegularizedDualAveraging)FTRL-Proximal(FollowTheRegularizedLeader)FOBOS,RDA,FTRL-Proximal的统一表示[1]DuchiJ.andSingerY.EfficientLearningusingForward-BackwardSplitting.NeurIP......
  • php函数入门学习(数组常见函数2 & 文件基础读写)
    //1、写一个函数,传入数组,返回数组中元素为数字且大于10的新结果数组functiongetNumArr($arr){  if(!$arr)return'请传入数组';  $arr2=array_filter($arr,function($v){    //echogettype($v)."<br>";    returngettype($v)==='inte......
  • 在JavaScript中,如何实现异步编程?
    在JavaScript中,如何实现异步编程?请列举几种常见的方法(如Promise、async/await)。在JavaScript中,异步编程是处理长时间运行的任务(如网络请求、文件读写、大量计算等)的关键。JavaScript是单线程的,但通过使用异步编程模式,我们可以编写出既不会阻塞主线程执行又能处理耗时任务的......
  • 基于Java中的SSM框架实现娱乐影视公司管理系统项目【项目源码+论文说明】
    基于Java中的SSM框架实现娱乐影视公司管理系统演示摘要电脑的出现是一个时代的进步,不仅仅帮助人们解决了一些数学上的难题,如今电脑的出现,更加方便了人们在工作和生活中对于一些事物的处理。应用的越来越广泛,通过互联网我们可以更方便地进行办公,也能够在网上就能处理很多日......
  • 基于Java中的SSM框架实现在线考试系统项目【项目源码+论文说明】
    摘要本楚水高中在线考试系统是针对目前楚水高中在线考试的实际需求,从实际工作出发,对过去的楚水高中在线考试系统存在的问题进行分析,结合计算机系统的结构、概念、模型、原理、方法,在计算机各种优势的情况下,采用目前最流行的B/S结构和java中流行的MVC三层设计模式和eclipse编辑......
  • python 基础之scrapy
    安装:installscrapy#-ihttps://pipy.douban.com/simple不一定好用改其他源码创建scrapy项目的命令:scrapystartproject<项目名字>创建爬虫命令:在项目路径下执行:`scrapygenspider<爬虫名字><允许爬取的域名>`scrapygenspiderbaiduwww.baidu.com运行项目:scra......
  • 墨烯的C语言技术栈-C语言基础-012
    数组要存储1-100的数字,怎么存储?C语言中给数组的定义:一组相同类型元素的集合数组定义intarr[10]={1,2,3,4,5,6,7,8,9,10};//定义一个整型数组,最多放10个元素intmain(){ //0-9都是整数 intarr[10]={10,11,12,13,14,15,16,17,18,19};//arr是数组名 [......