首页 > 编程语言 >高级java每日一道面试题-2024年7月12日

高级java每日一道面试题-2024年7月12日

时间:2024-07-12 15:58:03浏览次数:16  
标签:字符 面试题 12 java 字节 读写 缓冲区 Java 数据

如果有遗漏,评论区告诉我进行补充

面试官问: 你对IO流了解多少

我回答:

一. 什么是 Java IO 流?

回答
Java IO 流是用于处理输入和输出操作的一组类和接口。它允许程序从不同的数据源(如文件、网络连接、内存缓冲区等)读取数据或将数据写入到不同的目标位置。IO 流分为字节流和字符流两大类,字节流以字节为单位进行数据传输,而字符流以字符为单位进行数据传输。
- 字节流:处理的是字节数据,每次读写8位。包括InputStreamOutputStream及其子类。
- 字符流:处理的是字符数据,每次读写16位。包括ReaderWriter及其子类。

二. Java IO流的分类

回答

  1. 按照流的方向
    • 输入流(InputStream/Reader)
    • 输出流(OutputStream/Writer)
  2. 按照实现功能
    • 节点流(直接从或向一个特定节点读写数据,如FileReader)
    • 处理流(对一个已存在的流进行连接和封装,如BufferedReader)
  3. 按照处理数据的单位
    • 字节流(继承自InputStream/OutputStream,如FileInputStream/FileOutputStream)
    • 字符流(继承自Reader/Writer,如FileReader/FileWriter)

三. 字节流和字符流的区别是什么?

回答

特性字节流字符流
继承类InputStream/OutputStreamReader/Writer
传输单位字节(8位)字符(Java中通常为16位,Unicode字符)
缓冲区不直接通过缓冲区(但可结合BufferedInputStream/BufferedOutputStream使用)字符流操作通常在缓冲区中进行
适用场景适用于二进制数据(如图片、视频、音频等)的读写适用于文本数据的读写
编码字节流则需要开发者自己处理编码可以自动处理字符编码的转换

四. 简述 Java 中常用的字节流和字符流类。

回答
- 字节流
- FileInputStream / FileOutputStream:用于从文件读取/写入字节数据。
- ByteArrayInputStream / ByteArrayOutputStream:用于在内存中的字节数组上进行输入/输出操作。
- BufferedInputStream / BufferedOutputStream:提供了缓冲功能,以提高读写效率。
- 字符流
- FileReader / FileWriter:用于从文件读取/写入字符数据。
- StringReader / StringWriter:用于在字符串上进行输入/输出操作。
- BufferedReader / BufferedWriter:提供了缓冲功能,以提高读写效率。

五. 什么是缓冲流?它的作用是什么?**

回答

  • 缓冲流(如 BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter)是一种带有缓冲区的流。当使用缓冲流进行读写操作时,数据会先被写入到缓冲区中,当缓冲区满后,数据会一次性被写入到实际的目标位置(如文件)或从实际的数据源(如文件)中读取到缓冲区中。这样可以减少实际的 I/O 操作次数,提高读写效率。
  • 原因:磁盘的读写操作是非常耗时的,尤其是对于频繁的小数据量读写。缓冲流通过在内存中创建一个缓冲区,将多次小的数据读写合并成一次较大的读写操作,从而减少对磁盘的访问次数,提高效率。

六. 解释下Java中的FileInputStream和FileOutputStream。

FileInputStreamFileOutputStream是Java中用于读写文件的两个基本类,它们都属于字节流。

  • FileInputStream:用于从文件中读取字节数据。它是InputStream的子类,主要用于读取二进制文件,如图片、音频等。
  • FileOutputStream:用于向文件写入字节数据。它是OutputStream的子类,可以用来创建新文件或向已有文件追加数据。

标签:字符,面试题,12,java,字节,读写,缓冲区,Java,数据
From: https://blog.csdn.net/qq_43071699/article/details/140380640

相关文章

  • Java计算机毕业设计康养管理系统的设计与实现(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着人口老龄化的加速和社会对健康生活品质需求的日益增长,康养产业迎来了前所未有的发展机遇。传统的医疗护理模式已难以满足人们多元化、个性化的健......
  • Java计算机毕业设计高校多媒体教室管理系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着教育信息化的深入发展,高校多媒体教学已成为提升教学质量、丰富教学手段的重要手段。然而,传统的高校多媒体教室管理往往依赖于人工调度与维护,面临......
  • 一、java的简单介绍
    Java语言Java是一门面向对象的程序设计语言,在语法上Java与C和C++类似,但丢弃了其相对难理解的一些特性,如操作符重载、多继承、自动的强制类型转换,同时Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧。Java中最主要的是Java虚拟机(Jav......
  • uniform_filter1d之nearest模式基于JAVA编程实现
    1privatestaticDouble[]uniform_filter1d_double_fast(Double[]input,intsize){2Double[]output=newDouble[input.length];3//https://github.com/scipy/scipy4//‘nearest’(aaaa|abcd|dddd)5bool......
  • JavaScript进阶(四)---js解构
    目录一.定义:二.类型:1.数组解构:1.1变量和值不匹配的情况1.2多维数组2.对象解构3.对象数组解构4.函数参数解构5.扩展运算符一.定义:JavaScript中的解构(Destructuring)是一种语法糖,它允许我们从数组或对象中提取数据,并将这些数据赋值给新的变量。解构使得代码更......
  • day10-stack&Queue-part01-7.12
    tasksfortoday:1.理论基础2.232用栈实现队列3.225用队列实现栈4.20有效的括号5.1047删除字符串中所有相邻重复项--------------------------------------------------------------------------1.理论基础stack:firstinlastout     head    ......
  • #BAS3123. 【例21.3】 字符类型判断
    3123:【例21.3】字符类型判断【题目描述】输入一个字符,判断该字符是否大写字母、小写字母、数字字符或其他字符。分别输出对应的提示信息。【输入】输入为一个字符。【输出】如果该字符是大写字母,则输出" upper ";若是小写字母,则输出" lower ";若是数字字符,则输出" di......
  • Solution - Atcoder ARC127E Priority Queue
    考虑转化一下,每个最后留下来的集合都相对的对应着一个被删除的集合。于是考虑去对被删除的数去计数。然后贪心的,去让每一次\(2\)操作删除的数都是前面加入中还剩下的最后加入的数(因为有的可能被前面的\(2\)操作删了)。对于证明,考虑到如果不是剩下的最后加入的,那么中间可能会......
  • 2024.7.12 模拟赛
    A容易观察到每个“\(1\)”相当于是独立的,那么其位置越靠后越优,则对于\(i=1\ton-1\),每次都为\(a_i\)选择一个最大的满足\(i+2^t\leqn\)的\(t\)全部进行操作最优。使用__builtin_clz函数做到\(O(n)\),暴力算\(t\)做到\(O(n\logV)\)。B要想求出每个前缀的答案,就......
  • Java-Redis缓存穿透、缓存击穿及缓存雪崩(配解决方案及代码示例)
    前言在现代高并发的互联网应用中,缓存技术已成为提升系统响应速度与减轻后端数据库压力的关键手段。Redis,以其卓越的性能和丰富的数据结构,成为众多开发者构建缓存层的首选。然而,随着业务复杂度的增加,Redis缓存层也可能遭遇“缓存穿透”、“缓存击穿”以及“缓存雪崩”等现......