返回顶部
首页 > 资讯 > 精选 >Java I/O系统基础知识具体都有哪些
  • 619
分享到

Java I/O系统基础知识具体都有哪些

2023-06-17 08:06:12 619人浏览 泡泡鱼
摘要

Java I/O系统基础知识具体都有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。编程语言的I/O类库中常常使用流这个抽象的概念,它代表任何有能力产生数据的数据源对象或

Java I/O系统基础知识具体都有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

编程语言的I/O类库中常常使用流这个抽象的概念,它代表任何有能力产生数据的数据源对象或时有能力接收数据的接收端对象。“流”概念源于UNIX中的管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等,它屏蔽了实际的I/O设备中处理数据的细节。   一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。 流的方向是重要的,根据流的方向,流可以分为两类:输入流和输出流。其实输入/输出是想对于内存来说的。 实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对于输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端,只是简单地往流中写数据。

  1. a.流:一组有序的数据序列。

  2. b字节流:数据流中最小的数据单元是字节。

  3. c.字符流:数据流中最小的数据单元是字符。

 一.  java.io包中的类对应两类流

一类流直接从指定的位置(如磁盘文件或内存区域)读或写,这类流称为结点流,其他的流则称为过滤流(包装流)

过滤流:一些流可以从文件以及其他地方接收字节,另一些流可以将字节组合成更有用的数据类型。将一个已经存在的流传递给另一个流的构造方法,将这两种流结合起来,结合后的流被称为过滤流。过滤器输入流往往是以其它输入流作为它的输入源,经过过滤或处理后再以新的输入流的形式提供给用户,过滤器输出流也类似。我们很少用单一的类来创建流对象,而是通过叠合多个对象来提供所期望的功能(即装饰器设计模式)。

java的常用输入、输出流其实都是继承自4个抽象类,分别是:

  • 基于单字节的InputStream,OutputStream类(面向字节形式的I/O)

  • 基于双字节的Unicode代码单元的 Reader, Writer类(面向字符形式的I/O)

 一旦打开输入流后,程序就可从输入流串行地读数据。从输入流读/写数据的过程一般如下:打开一个流通道-->读取/写信息-->关闭流通道。

在java平台中,有以下两种方式能获得本地平台的字符编码类型:

(a)System.getProperty("file.encoding");

(b) Charset cs=Charset.defaultCharset();

所有的输入流、输出流都可以分为字节(输入、输出)流,字符(输入、输出)流,处理字节的主要是(OutputStream/InputStream) 系列,处理字符的,主要是(Reader/Write)系列 

二.以字节(Byte)为导向的输入流(InputStream系列),这几个类都可以与FileInputStream对象相连以提供有用接口:

  1. ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用

  2. StringBufferInputStream(在java1.1中已经弃用了):把一个String对象作为InputStream,底层实现使用StringBuffer

  3. FileInputStream:把一个文件作为InputStream,实现对文件的读取操作(文件名、文件、FileDescriptor对象)

  4. PipedInputStream:实现了pipe的概念,主要在线程中使用(作为多进程中的数据源)

  5. SequenceInputStream:把多个InputStream合并为一个InputStream

以字节(Byte)为导向的输出流(OutputStream系列),可以与FilterOutputStream对象相连以提供有用接口:

  1. ByteArrayOutputStream:在内存中创建缓冲区,把信息存入内存中的一个缓冲区中,缓冲区初始化尺寸(可选)

  2.  FileOutputStream:把信息存入文件中(文件名、文件、FileDescriptor)

  3. PipedOutputStream:实现了pipe的概念,主要在线程中使用(指定用于多线程的数据的目的地)

.与之对应的(Reader/Writer)系列:

  1. Reader:                 与InputStream相对应,适配器InputStreamReader

  2. Writer:                 与OutputStream相对应,适配器为OutputStreamWriter

  3. FileReader:              与FileOutputStream相对应

  4.  FileWriter:             与FileOurputStream相对应

  5.  StringReader:           无相对应的类

  6. StringWriter:           与ByteArrayInputStream相对应

  7. CharArrayReader:        与ByteArrayOutputStream相对应

  8.  CharArrayWriter:        与ByteArrayOutputStream相对应

  9.  PipedReader:            与PipedInputStream相对应

  10.  PipedWriter:            与PipedOutputStream相对应

四.两种不限导向的stream之间的转换(使用适配器类)

InputStreamReader和OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream。

InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集

OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集

五.通过FilterInputStream从InputStream读取数据:

  1. DatainputStream:从stream中读取基本类型(int、char,long等)数据。

  2. BufferedInputStream:使用缓冲区 ,使用它可以防止每次读取都得进行实际的读操作

  3. LineNumberInputStream:会记录input stream内的行数,然后可调用getLineNumber()和setLineNumber(int)

  4. PushbackInputStream:很少用到,一般用于编译器开发

通过FilterOutputStream向OutputStream写入:

  1. DataioutputStream:可以按照移植方式往stream中输出基本类型(int、char,long等)数据。

  2.  BufferedOutputStream:使用缓冲区 ,使用它可避免每次发送数据都进行实际的写操作

  3.  PrintStream:产生格式化输出 ,其中DataOutputStream处理数据的存储,PrintStream处理显示

六.更改流的行为

尽管BufferedOutputStream是FilterOutputStream的子类,但是BufferedWriter并不是FilterWriter的子类,(FilterWriter是抽象类,没有任何子类)

  1. 没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用DataInputStream

  2. BufferedReader:与BufferedInputStream对应

  3.  LineNumberReader:与LineNumberInputStream对应

  4. PushBackReader:与PushbackInputStream对应

  5. BufferedWrite:与BufferedOutStream对应

  6. PrintWrite:与 PrintStream对应

七.自我独立的类:RandomAccessFile

这个类适用于有大小已知的记录组成的文件,RandoMaccessFile除了实现了DataInput和DataOutput接口(DataInputStream和DataOutputStream也实现了这两个接口)之外,这个类是个完全独立的类,它拥有和别的I/O类型本质不同的行为,可以在一个文件内向前和向后移动,直接从Object派生而来。

  1. 可通过RandomAccessFile对象完成对文件的读写操作

  2. 在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写

  3. 可以直接跳到文件中指定的位置

RandomAccessFile的大部分功能(不是全部)有NIO存储映射文件所取代

关于Java I/O系统基础知识具体都有哪些问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: Java I/O系统基础知识具体都有哪些

本文链接: https://lsjlt.com/news/287903.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java I/O系统基础知识具体都有哪些
    Java I/O系统基础知识具体都有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。编程语言的I/O类库中常常使用流这个抽象的概念,它代表任何有能力产生数据的数据源对象或...
    99+
    2023-06-17
  • SparkSQL基础知识都有哪些
    这篇文章给大家介绍SparkSQL基础知识都有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一.SparkSQL架构1.架构2.解释一个sql 过来 解析成unresolved,只拿出来字段名和...
    99+
    2023-06-02
  • 有哪些Java基础知识
    本篇内容介绍了“有哪些Java基础知识”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 面向对象与面向过程的区别首先面向过程和面向对...
    99+
    2023-06-16
  • java基础知识有哪些
    这篇文章给大家分享的是有关java基础知识有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.java基础1.1Java历史Java:由Sun Microsystems公司于1995年5月推出的Java程序设...
    99+
    2023-06-20
  • CentOS系统的基础知识有哪些
    今天就跟大家聊聊有关CentOS系统的基础知识有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。有些朋友一直对CentOS系统云里雾里的, 觉得很奇怪,如果没有图形界面,我的光盘中...
    99+
    2023-06-16
  • Linux系统iptables基础知识有哪些
    这篇文章给大家介绍Linux系统iptables基础知识有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。iptables防火墙可以用于创建过滤(filter)与NAT规则。所有Linux发行版都能使用iptable...
    99+
    2023-06-28
  • 常见的Java基础语法知识都有哪些
    本篇内容主要讲解“常见的Java基础语法知识都有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“常见的Java基础语法知识都有哪些”吧!  对象:对象是类的一个实例,有状态和行为。  类:类是...
    99+
    2023-06-02
  • .NET序列化基础知识都有哪些
    本篇文章给大家分享的是有关.NET序列化基础知识都有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我们在.NET编程开发学习中会碰到.NET序列化的问题,那么这里就向你简单...
    99+
    2023-06-17
  • Linux系统的基础知识点有哪些
    小编给大家分享一下Linux系统的基础知识点有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!网络是一个很神奇的东西,现代人的生活离不开网络,网络已深入人们的工作,生活,娱乐等方方面面。网络之所以无处不在,是因为它提供了...
    99+
    2023-06-12
  • Ubuntu服务系统基础知识有哪些
    这篇文章主要讲解了“Ubuntu服务系统基础知识有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Ubuntu服务系统基础知识有哪些”吧!一. 基础知识补充 在Linux系统下,各个Ubu...
    99+
    2023-06-17
  • Java基础知识点有哪些
    这篇文章主要介绍“Java基础知识点有哪些”,在日常操作中,相信很多人在Java基础知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java基础知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-02
  • Java的基础知识有哪些
    这篇文章主要介绍“Java的基础知识有哪些”,在日常操作中,相信很多人在Java的基础知识有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的基础知识有哪些”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-02
  • Java基础知识之I/O流和File类文件操作
    目录♒I/O流原理及流的分类I/O原理I/O流的分类️文件(File)概念✍️常用操作(File类)总结♒I/O流原理及流的分类 I/O原理 I/O是Input和Output的缩写,...
    99+
    2024-04-02
  • CentOS系统的基础优化知识有哪些
    本篇内容介绍了“CentOS系统的基础优化知识有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!优化的总结: 1、不用root管理,以普通...
    99+
    2023-06-10
  • Java入门基础知识有哪些
    这篇文章主要介绍“Java入门基础知识有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java入门基础知识有哪些”文章能帮助大家解决问题。Java 是由Sun Microsystems公司于19...
    99+
    2023-06-02
  • Java基础知识之I/O流和File类文件操作方法
    今天小编给大家分享一下Java基础知识之I/O流和File类文件操作方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。♒I/...
    99+
    2023-06-30
  • Java编码基础知识点有哪些
    这篇文章主要介绍“Java编码基础知识点有哪些”,在日常操作中,相信很多人在Java编码基础知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java编码基础知识点有...
    99+
    2024-04-02
  • Java编程基础知识点有哪些
    这篇文章主要介绍“Java编程基础知识点有哪些”,在日常操作中,相信很多人在Java编程基础知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java编程基础知识点有...
    99+
    2024-04-02
  • Java中的基础知识点有哪些
    这篇文章主要讲解了“Java中的基础知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中的基础知识点有哪些”吧!"Hello World!"先来看一个He...
    99+
    2023-06-02
  • mysql基础知识有哪些
    本篇内容介绍了“mysql基础知识有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一章 mysql的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作