首页 > 编程语言 >Java中的InputStream和OutputStream详解

Java中的InputStream和OutputStream详解

时间:2024-01-08 11:06:54浏览次数:28  
标签:OutputStream Java 读取 int InputStream 字节

引言

在Java编程中,处理输入输出是日常任务的一部分,而流(Stream)是实现输入输出的核心概念。在Java I/O API中,InputStreamOutputStream是所有字节流类的基础。本文将详细介绍这两个类及其在Java中的应用。

什么是InputStream和OutputStream?

InputStream 是Java I/O库中的一个抽象类,它是表示字节输入流的所有类的超类。它用于从源(如文件、数组、字符串、网络连接等)读取字节数据。

OutputStream 同样是一个抽象类,代表字节输出流的所有类的超类。它用于将字节数据写入目的地。

InputStream的常用方法
  • int read(): 读取单个字节的数据。如果没有输入可用,此方法将阻塞。
  • int read(byte[] b): 读取一些字节并将它们存储到缓冲区数组b中。
  • int read(byte[] b, int off, int len): 从输入流中读取最多len个字节的数据到一个字节数组。
  • void close(): 关闭输入流并释放与该流相关联的所有系统资源。
OutputStream的常用方法
  • void write(int b): 将指定的字节写入此输出流。
  • void write(byte[] b): 将b.length字节从指定的字节数组写入此输出流。
  • void write(byte[] b, int off, int len): 将指定字节数组中从偏移量off开始的len个字节写入此输出流。
  • void flush(): 刷新此输出流并强制写出所有缓冲的输出字节。
  • void close(): 关闭此输出流并释放与此流相关联的任何系统资源。
使用InputStream和OutputStream

以下是如何使用InputStream和OutputStream进行文件读写的示例代码。

读取文件示例:

try (InputStream is = new FileInputStream("example.txt")) {
    int byteRead;
    while ((byteRead = is.read()) != -1) {
        // 处理字节数据
        System.out.print((char) byteRead);
    }
} catch (IOException e) {
    e.printStackTrace();
}

写入文件示例:

try (OutputStream os = new FileOutputStream("example.txt")) {
    String data = "Hello, World!";
    byte[] dataBytes = data.getBytes();
    os.write(dataBytes);
} catch (IOException e) {
    e.printStackTrace();
}
InputStream和OutputStream的子类

Java I/O API提供了多个实现了这两个抽象类的具体类,例如:

  • FileInputStreamFileOutputStream:用于文件读写。
  • ByteArrayInputStreamByteArrayOutputStream:用于内存数组读写。
  • BufferedInputStreamBufferedOutputStream:用于缓冲输入输出,增加效率。
  • DataInputStreamDataOutputStream:可以读取和写入Java原始数据类型。
  • ObjectInputStreamObjectOutputStream:可以读取和写入对象。
总结

InputStreamOutputStream在Java世界中是处理字节流数据的基石。它们提供了一个强大的框架,用于从各种数据源读取和写入数据。通过使用它们的不同实现,我们可以很容易地处理来自文件、网络或内存的数据。理解这些类及其方法对于任何需要进行I/O操作的Java开发者来说都是至关重要的。

注意事项

在使用InputStreamOutputStream时,一定要记得关闭流。这可以通过close()方法实现,或者更好的方式是使用try-with-resources语句,它会自动关闭实现了AutoCloseable接口的资源。不正确地关闭流可能会导致资源泄露和其他性能问题。

标签:OutputStream,Java,读取,int,InputStream,字节
From: https://blog.51cto.com/u_16351957/9140102

相关文章

  • 使用Jsoup的Java网络爬虫示例:抓取在线考试平台试题数据
    网络爬虫是一种强大的工具,用于从互联网上收集信息。而在Java中,Jsoup是一款常用的HTML解析库,提供了便捷的API来解析、提取和操作HTML数据。在本文中,我们将深入探讨如何利用Jsoup库构建一个Java网络爬虫,并使用代理服务器来抓取在线考试平台的试题数据。介绍Jsoup和网络爬虫首先,我们将......
  • Java医院医学AI智能导诊系统源码
    医院智能导诊系统是一款基于人工智能和大数据技术开发的医疗辅助软件,旨在为患者提供更加便捷、精准的医疗服务。一、什么是智能导诊系统?智能导诊系统是一种基于人工智能和大数据技术开发的医疗辅助软件,它能够通过对患者的症状、病史等信息进行计算分析,快速推荐科室和医生。通过简......
  • Java之序列化的详细解析
     3.序列化3.1概述Java提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据、对象的类型和对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反......
  • 详解Java中的原子操作
    第1章:什么是原子操作大家好,我是小黑,面试中一个经常被提起的话题就是“原子操作”。那么,到底什么是原子操作呢?在编程里,当咱们谈论“原子操作”时,其实是指那些在执行过程中不会被线程调度机制打断的操作。这种操作要么完全执行,要么完全不执行,没有中间状态。这就像是化学里的原子,不......
  • Java 的 3 种网络编程的I/O 模型
     在Java的软件设计开发中,通信架构不可避免,我们在进行不同系统或者不同进程之间的数据交互,或者在高并发下的通信场景下都需要用到网络通信相关的技术,对于一些经验丰富的程序员来说,Java早期的网络通信架构存在一些缺陷,其中最令人恼火的是基于性能低下的同步阻塞式的I/O通信(BIO),随着......
  • java后台字符串URLencode、URLdecode及Base64加解密转换
    一、URLencode、URLdecode//将application/x-www-from-urlencoded字符串转换成普通字符串StringkeyWord=URLDecoder.decode("%E4%BD%A0%E5%A5%BD","utf-8");System.out.println(keyWord);//输出你好//将普通字符创转换成application/x-www......
  • Java Steam 常用 API
    微信公众号:运维开发故事作者:wanger现在Java17和Java11基本上可以和Java8平分JDK装机比例。下面是我常用的一些StremAPI操作。除了分组、转换、排序,如果大家还有更多常用的API可以一起留言交流。分组List 默认分组过后是Map<Key,List>List<StreamItem>streamLis......
  • javascript基础学习系列一:标识符
    一般来说,语言中的标识符可以分为两类,一类用于命名语法(以及类型),一类用于命名值(的存储位置)。前者被称为“语法关键字”,后者则被称为“变量”和“常量”。由此引入了一个概念:绑定。从标识符的角度来说,绑定分为语法关键字与语法(语义)逻辑的绑定,以及变量与它所存储值的位置的绑定......
  • Java中DTO和VO的使用指南
    @[TOC]Java中DTO和VO的使用指南在Java开发中,DTO(DataTransferObject)和VO(ValueObject)是两个常见的设计模式,它们在不同的上下文中有着不同的用途。本文将深入讨论DTO和VO的概念、用途以及在实际项目中的使用方法。1.DTO(数据传输对象)DTO是一种用于在不同层之间传递数据的对象,其主要......
  • Java学习网站,哪个最靠谱?
    简介Java学习网站有很多,哪个最靠谱呢?本文对Java学习网站进行对比。第1类:大型培训机构(黑马等)典型机构黑马、尚硅谷、动力节点、白马、千锋、达内。优点知名度高。教程齐全(Java、前端、Python等都有)省心(跟着培训的进度走,不需要自己找资料)缺点学习成本高。(几百到几万不等)。教程质量......