当前位置:网站首页 > 编程语言 > 正文

读取文件为byte(读取文件为什么是繁体字)



一、I/O流概述

(1)大部分程序都需要进行输入/输出处理,比如从键盘读取数据、从屏幕中输出数据、从文件中写数据等等。在java中,把这些不同类型的输入、输出源抽象为流(Stream),而其中输入或输出的数据则成为数据流(Data Stream),用统一的接口表示,从而使程序设计简单明了。

java获取系统字体失败_数据

(2)流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作

(3)流一般分为 输入流(Input Stream) 和 输出流(Output Stream)。

java获取系统字体失败_io_02

二、基类:InputStream 和 OutputStream

1、字节流主要操作 byte类型数据,以byte数组为准。

2、字节流的基本功能 依赖于 基本类InputStream和OutputStream, 它们是抽象类,不能直接使用。

3、字节流能处理所有类型的数据。

4、InputStream

(1)InputStream是所有表示 位输入流

(2)InputStream是 从装置来源地读取数据

(3)InputStream类的方法:

java获取系统字体失败_io_03

在InputStream类中,方法read()提供了三种从流中读数据的方法:

《1》int read():从输入流中读一个字节,形成一个0~255之间的整数返回(是一个抽象方法)。

《2》int read(byte b[]):从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。

《3》int read(byte b[], int off ,int len): 从输入流中读取长度为len的数据,写入数组b中从索引off开始的位置,并返回读取的字节数。

对于这三种方法,若返回-1,表明流结束,否则,返回实际读取的字符数。

5、OutputStream

(1)OutputStream是所有表示 位输出流 的类之父类,子类要重新定义其中所定义的抽象方法。

(2)OutputStream是用于 将数据写入目的地

(3)OutputStream类方法:

java获取系统字体失败_数据_04

运行结果:

java获取系统字体失败_java获取系统字体失败_05

三、文件流

1、java.io包中所提供的文件操作类包括:

(1)用于读写本地文件系统中的文件:FileInputStream 和FileOutputStream

(2)描述本地文件系统中的文件或目录:File、FileDescriptor 和 FilenameFilter

(3)提供对本地文件系统中文件的随机访问支持:RandomAccessFile

2、FileInputStream类: 用于打开一个输入文件,若打开的文件不存在,则会产生异常FileNotFoundException(这是一个非运行时异常,必须捕获或声明抛弃)。

3、FileOutputStream类:用来打开一个输出文件,若要打开的文件不存在,则会创建一个新的文件,否则原文件的内容会被新写入的内容所覆盖。

4、在进行文件的读/写操作时,会产生非运行时异常IOException,必须捕获或声明抛弃。

5、文件流的构造方法:

示例代码:

四、缓冲流

1、类BufferedInputStream 和 BufferedOutputStream 实现了带缓冲的过滤流,它提供了缓冲机制,把任意的I/O流“捆绑”到缓冲流上,可以提高I/O流的读取效率。

2、在初始化时,除了要指定所连接的I/O流之外,还可以指定缓冲区的大小。

32字节大小的缓冲区;

最优的缓冲区大小常依赖于主机操作系统、可使用的内存空间以及机器的配置等;一般缓冲区的大小为内存页或磁盘块等的整数倍。

3、BufferedInputStream 的数据成员 buf 是一个位数组,默认为2048字节。

当读取数据来源时例如文件,BufferedInputStream 会尽量将 buf 填满。

先读取 buf 中的数据,而不是直接对数据来源作读取。当 buf 中的数据不足时,BufferedInputStream 才会再实现给定的 InputStream 对象的 read() 方法,从指定的装置中提取数据。

4、BufferedOutputStream 的数据成员 buf 是一个位数组,默认为512字节。当使用 write() 方法写入数据时,实际上会先将数据写至 buf 中,当 buf 已满时才会实现给定的 OutputStream 对象的 write() 方法,将 buf 数据写至目的地,而不是每次都对目的地作写入的动作。

java获取系统字体失败_java获取系统字体失败_06

5、构造方法

例子:将缓冲流与文件流相接:

java获取系统字体失败_java获取系统字体失败_07

对于 BufferedOutputStream,只有缓冲区满时,才会将数据真正送到输出流,但可以使用 flush() 方法人为地将尚未填满的缓冲区中的数据送出。

例如:方法copy():

五、数据流

1、接口 DataInput 和 DataOutput,设计了一种较为高级的数据输入输出方式:除了可处理字节和字节数组外,还可以处理 int、float、boolean等基本数据类型,这些数据在文件中的表示方式和它们在内存中的一样,无须转换,如 read(), readInt(), readByte()...; write(), writeChar(), writeBoolean()...此外,还可以用 readLine()方法读取一行信息。

2、

java获取系统字体失败_数据_08

java获取系统字体失败_java_09

3、数据流类 DateInputStream 和 DataOutputStream 的处理对象除了是字节或字节数组外,还可以实现对文件的不同数据类型的读写:

(1)分别实现了 DataInput 和 DataOutput 接口

(2) 在提供字节流的读写手段同时,以统一的形式向输入流中写入 boolean,int,long,double 等基本数据类型,并可以再次把基本数据类型的值读取回来。

(3)提供了字符串读写的手段

4、数据流可以连接一个已经建立好的数据对象,例如网络连接、文件等。

数据流可以通过如下方式建立:

运行结果:

java获取系统字体失败_java_10

六、标准流、内存读写流、顺序输入流

1、标准流

语言包 java.lang 中的 System 类管理标准输入/输出流和错误流。

System.in从 InputStream 中继承而来,用于从标准输入设备中获取输入数据(通常是键盘)

System.out从 PrintStream 中继承而来,把输入送到缺省的显示设备(通常是显示器)

System.err也是从 PrintStream 中继承而来,把错误信息送到缺省的显示设备(通常是显示器)

每当 main 方法被执行时,就会自动生产上述三个对象。

2、内存读写流

为了支持在内存上的 I/O,java.io 中提供了类:ByteArrayInputStream、ByteArrayOutputStream 和 StringBufferInputStream

(1)ByteArrayInputStream 可以从指定的字节数组中读取数据

(2)ByteArrayOutputStream 中提供了缓冲区可以存放数据(缓冲区大小可以在构造方法中设定,缺省为32),可以用 write() 方法向其中写入数据,然后用 toByteArray() 方法将缓冲区中的有效字节写到字节数组中去。size() 方法可以知道写入的字节数;reset() 可以丢弃所有内容。

(3)StringBufferInputStream 与 ByteArrayInputStream 相类似,不同点在于它是从字符缓冲区 StringBuffer 中读取16位的 Unicode 数据,而不是8位的字节数据(已被 StringReader 取代)

3、顺序输入流

java.io 中提供了类 SequenceInputStream,使应用程序可以将几个输入流顺序连接起来。顺序输入流提供了将多个不同的输入流统一为一个输入流的功能,这使得程序可能变得更加简洁。

例如:

到此这篇读取文件为byte(读取文件为什么是繁体字)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 程序员入门必备键盘(程序员必备键盘推荐)2025-11-29 18:54:07
  • ewm焊机(ewm焊机面板功能讲解)2025-11-29 18:54:07
  • 抖音怎么扫二维码登录不了(抖音二维码扫不上)2025-11-29 18:54:07
  • ssh免密登录设置(ssh设置免密登陆)2025-11-29 18:54:07
  • 字符转编码(字符转utf-8编码)2025-11-29 18:54:07
  • 虚拟机win732位镜像文件(windows7虚拟机镜像)2025-11-29 18:54:07
  • 虚拟机装xp玩老游戏(win10虚拟机xp玩游戏)2025-11-29 18:54:07
  • 合并数组(合并数组和非合并数组)2025-11-29 18:54:07
  • nvme接口兼容sata协议(nvme硬盘兼容sata)2025-11-29 18:54:07
  • esp32 udp广播(esp8266 udp广播)2025-11-29 18:54:07
  • 全屏图片