首页 > 编程语言 >Java 中常见类型的流

Java 中常见类型的流

时间:2023-10-05 14:55:33浏览次数:42  
标签:字符 Java 字节 对象 常见 写入 类型 读取

Java 中的流(Stream)分为两种类型:字节流和字符流。

    字节流(Byte Stream)

字节流可以处理任何类型的数据,但是它们是以字节为单位进行操作的。Java 中提供了两种字节流:InputStream 和 OutputStream。

InputStream 是字节输入流,用于从数据源读取数据。InputStream 的常用子类包括:

    FileInputStream:用于从文件中读取数据。
    ByteArrayInputStream:用于从字节数组中读取数据。
    PipedInputStream:用于从管道中读取数据。

OutputStream 是字节输出流,用于将数据写入到目标位置。OutputStream 的常用子类包括:

    FileOutputStream:用于将数据写入文件。
    ByteArrayOutputStream:用于将数据写入字节数组。
    PipedOutputStream:用于将数据写入管道。

    字符流(Character Stream)

字符流用于处理字符数据,它们是以字符为单位进行操作的。Java 中提供了两种字符流:Reader 和 Writer。

Reader 是字符输入流,用于从数据源读取字符。Reader 的常用子类包括:

    FileReader:用于从文件中读取字符。
    CharArrayReader:用于从字符数组中读取字符。
    StringReader:用于从字符串中读取字符。

Writer 是字符输出流,用于将字符写入到目标位置。Writer 的常用子类包括:

    FileWriter:用于将字符写入到文件。
    CharArrayWriter:用于将字符写入到字符数组中。
    StringWriter:用于将字符写入到字符串中。

Java 中的流可以按照流的作用分为不同的类型,包括:

    节点流(Node Stream):直接从数据源读取或写入数据的流。
    处理流(Filter Stream):在节点流的基础上增加了一些功能的流。例如,BufferedInputStream 可以使用缓存机制提高读取效率。
    对象流(Object Stream):可以读取或写入 Java 对象的流。例如,ObjectInputStream 和 ObjectOutputStream。

在使用流时,应该遵循以下原则:

    打开流:创建一个输入流或输出流的对象。
    读写数据:使用流读取或写入数据。
    关闭流:使用完流后,应该关闭流以释放资源。通常使用 try-with-resources 语句块来自动关闭流。

    缓冲流(Buffered Stream)

缓冲流是处理流的一种,它使用缓存机制来提高 I/O 操作的效率。Java 中提供了两种缓冲流:BufferedInputStream 和 BufferedOutputStream。

BufferedInputStream 继承自 FilterInputStream,用于从输入流中读取数据并提供缓冲功能。BufferedOutputStream 继承自 FilterOutputStream,用于将数据写入到输出流中并提供缓冲功能。

在使用缓冲流时,应该遵循以下原则:

    打开流:创建一个输入流或输出流的对象。
    创建缓冲流:将输入流或输出流传递给 BufferedInputStream 或 BufferedOutputStream 的构造函数。
    读写数据:使用缓冲流读取或写入数据。
    关闭流:使用完缓冲流后,应该关闭缓冲流以释放资源。关闭缓冲流时,缓冲流会自动刷新缓存区。

    转换流(InputStreamReader 和 OutputStreamWriter)

转换流是字符流和字节流之间的桥梁,它可以将字节流转换为字符流,也可以将字符流转换为字节流。Java 中提供了两种转换流:InputStreamReader 和 OutputStreamWriter。

InputStreamReader 将字节流转换为字符流,OutputStreamWriter 将字符流转换为字节流。转换流使用指定的字符集将字节流中的字节解码为字符,或将字符编码为指定的字节序列。

在使用转换流时,应该遵循以下原则:

    打开流:创建一个输入流或输出流的对象。
    创建转换流:将输入流或输出流传递给 InputStreamReader 或 OutputStreamWriter 的构造函数。需要指定字符集。
    读写数据:使用转换流读取或写入数据。
    关闭流:使用完转换流后,应该关闭转换流以释放资源。关闭转换流时,转换流会自动关闭底层的字节流或字符流。

    对象流(Object Stream)

对象流可以读取或写入 Java 对象,包括基本数据类型和引用类型。Java 中提供了两种对象流:ObjectInputStream 和 ObjectOutputStream。

ObjectInputStream 从输入流中读取对象,ObjectOutputStream 将对象写入到输出流中。对象流需要将对象序列化和反序列化为字节序列。

在使用对象流时,应该遵循以下原则:

    打开流:创建一个输入流或输出流的对象。
    创建对象流:将输入流或输出流传递给 ObjectInputStream 或 ObjectOutputStream 的构造函数。
    读写对象:使用对象流读取或写入对象。
    关闭流:使用完对象流后,应该关闭对象流以释放资源。关闭对象流时,对象流会自动关闭底层的字节流或字符流。

标签:字符,Java,字节,对象,常见,写入,类型,读取
From: https://www.cnblogs.com/djcCode/p/17743321.html

相关文章

  • java基础二
    1python和java字符串比较1.1java字符串常用方法importjava.util.Arrays;publicclassDemo01{publicstaticvoidmain(String[]args){//1字符串的常用方法Stringorigin="helloworld中国";//1取指定位置的字符从0开始//......
  • 基于Java的考编论坛网站的设计与实现(亮点:在线发布帖子、内容评论回复、购买二手物品、
    (考编论坛网站)网上大部分的毕设套路如下:在b站发毕设项目的演示视频,让你免费领取,你领取完发现代码不全或者数据库少表,根本跑不起来!如果要调试则收费300:sweat_smile:真的是恶心至极有没有!某宝找人帮忙写,简单来说比第一种行为靠谱,但是很贵!说是可以免费修改其实修改基本排不上队,......
  • 什么是 TypeScript 的类型增强功能
    TypeScript的类型增强(TypeAugmentation)是一种功能,它允许您扩展现有类型的成员,以添加新的属性或方法,以及修改已有属性或方法的类型定义。这个功能让您可以更好地适应第三方库或原始代码,以便在不修改源代码的情况下添加自定义的类型信息。在本文中,我将详细介绍TypeScript的类型增......
  • Java基础知识29--主线程、子线程执行顺序
    1、主线程与子线程互不影响最常见的情况,主线程中开启了一个子线程,开启之后,主线程与子线程互不影响各自的生命周期,即主线程结束,子线程还可以继续执行;子线程结束,主线程也能继续执行。publicclassTestThread{publicstaticvoidmain(String[]args)throwsInterruptedExcepti......
  • java——redis随笔——基础
         层级模式:                                          11......
  • java基础-基础语法和数据类型
    2java环境搭建2.1安装jdk和配置环境变量#java的开发环境,需要安装jdk#java的运行环境,运行java项目,正常只需要装jre即可,但是好多人都装jdk#无论运行java程序还是开发java程序,直接装jdk即可#jdk:java开发环境JavaDevelopmentKit#jre:java运行环境#jvm:java虚拟机,j......
  • JavaScript中的888
    1、最新的ECMAScript标准定义了8种数据类型:包括七种基本数据类型和一种引用类型:类型说明Boolean有2个值分别是:true和false。null一个表明null值的特殊关键字。undefined和null一样是一个特殊的关键字undefined表示变量未赋值时的属性。Number......
  • redis的hash类型操作方法
    一、介绍Hash是一个键值对的集合。Hash是一个String类型的field(字段)和value(值)的映射表,hash特别适合用于存储对象。Hash存储结构优化:如果field数量较少,存储结构优化为类数组结构如果field数量较多,存储结构使用HashMap结构二、原生操作1.增加/修改【key的field的v......
  • Java8 新特性
    一、十大特性Lambda表达式Stream函数式操作流元素集合接口新增:默认方法与静态方法方法引用,与Lambda表达式联合使用引入重复注解类型注解最新的Date/TimeAPI(JSR310)新增base64加解密API数组并行(parallel)操作JVM的PermGen空间被移除:取代它的是Metaspace(JEP122) ......
  • JavaSE(07) - API -String字符串
    JavaSE(07)-API-String字符串p96API和API帮助文档p97String概述java.lang.String类代表字符串,java程序中的所有字符串文字(例如"abc")都是此类的对象.注意点:字符串的内容是不会发生改变的,他的对象在创建后不能被更改.p89String的构造方法代码实现和内存分析......