Java 输入输出流教程(一)(原作:Java IO Tutorial by Jakob Jenkov)

CNN经典论文(一)LeNet Gradient-Based Learning Applied to Document Recognition(梯度学习在文档识别中的应用) Yann LeCun, Leon Bottou, Yoshua Bengio, and Patrick Haffner 发表时间:December 1998 期刊:Proceedings of the IEEE 影响:世界上第一个卷积神经网络 论文地址:Gradient-Based Learning Applied to Document Recognition 阅读详情

译者注:作为一个Java菜鸟,一直对输入输出流表示十分混沌。这个tutorial的出现,让我对Java IO有了一个比较清晰的认识,所以把它翻译在这,作为自己学习的记录,也可以跟大家分享。原文链接:http://tutorials.jenkov.com/java-io/index.html。本篇是前两课的译文。

一、JAVA IO简介

大多数的JAVA应用都需要接收一些输入,并且根据这个输入做一些输出。JAVA IO包(java.io)的目的,就是实现这个任务。

如果你看了java.io中的类,这么多的类会让人非常困惑。这些类的目的都是什么?对于一个给定的任务,你要选择哪个类去使用?如何建立自己的IO类……这篇教程的目的是告诉你这些类是如何被分类的,它们的作用是什么。让你不用再怀疑自己选择的类是否正确,不用再困惑你需要的类是否已经存在。

java.io的范围

java.io没有处理所有类型的输入和输出,比如在一个用户界面或者网页上,获得输入、发布输出就没有被包含在java.io中。这些类型可能被包含在其他包里,比如Swing工程中的JFC类,或者是企业版JAVA的Servlet或HTTP包中。

java.io只关注于比较基础的,文件、网络流、内存缓存等的输入和输出。

这篇JAVA IO教程的范围

以下是这篇教程的内容,这篇教程并不是一个接口列表,你可以从sun公司的官网上的java文档中获得接口列表。这篇教程其实是对每个类的一个简短的介绍,包括它的作用,和一些使用它的例子。换言之,是一些你在java文档中无法找到的东西。

Java IO


Java IO 简介

Java IO 综述


Java 文件

Java 管道

Java 网络流

Java 字节+字符串

Java System.in / .out / .error


Java 流

Java 读/写

Java 输入解析

Java 并发IO

Java IO异常处理


Java InputStream

Java OutputStream

Java FileInputStream

Java FileOutputStream

Java RandomAccessFile

Java File

Java PipedInputStream

Java PipedOutputStream

Java ByteArrayInputStream

Java ByteArrayOutputStream

Java FilterInputStream

Java FilterOutputStream

Java BufferedInputStream

Java BufferedOutputStream

Java PushbackInputStream

Java SequenceInputStream

Java DataInputStream

Java DataOutputStream

Java PrintStream

Java ObjectInputStream

Java ObjectOutputStream

Java Serializable


Java Reader

Java Writer

Java InputStreamReader

Java OutputStreamWriter

Java FileReader

Java FileWriter

Java PipedReader

Java PipedWriter

Java CharArrayReader

Java CharArrayWriter

Java BufferedReader

Java BufferedWriter

Java FilterReader

Java FilterWriter

Java PushbackReader

Java LineNumberReader

Java StreamTokenizer

Java PrintWriter

Java StringReader

Java StringWriter

二、Java IO综述

在这部分我会对java.io中的类进行一个综述,具体的说,我将根据它们的作用将它们分类。这种分类会让你更容易决定使用哪个类来解决问题。

以下是这一课的三个议题:

1.输入和输出-源和目标

2.java IO的目的和特性

3.java IO类概览


1.输入和输出-源和目标

对于”输入“和”输出“这两个词,有时会有一些混淆。一个程序的输入通常是另一个程序的输出,OutputStream究竟是将输出写入其中的流,还是输出的来源?毕竟,InputStream是将它的数据“输出”到“读取”程序中,不是吗?对我来说,我在刚学习java IO的时候对这一点有些困惑。

为了解开这个困惑,我将“输入”和“输出”改名,将它们与“这个输入从哪里来”和“这个输出要到哪里去”联系起来。(于是便有了所谓的“源和目标”)

对大多数的java程序来说,它们只关心将原始数据从“源”读到,并且将其写到“目标”中。典型的源和目标的形式包括:

  • 文件
  • 管道(pipes,指线程之间的数据传输,不确定是否翻译成管道)
  • 网络连接
  • 内存缓存
  • System.in/.out/.error

下图表示了,程序从源中读取数据,并将其写入目标当中的过程。


程序在从“源”读取数据时,需要InputStream或者Reader.程序在往“目标”中写数据时,需要OutputStream或者Writer.这同样可以通过图表示为:


所以,InputStream与一个“源”相联系,OutputStream与一个“目标”相联系。我们跟“源”打交道的时候用到InputStream或者Reader,跟“目标”打交道的时候用到“OutputStream"或者"Writer".

2.Java IO的目的和特性

JAVA IO中的类有着不同的作用,可以解决不同的问题,这也就是为什么会有这么多类。这些问题,也就是Java IO类的作用可以总结为以下这些点:
  • 文件存取
  • 网络存取
  • 内存缓存存取
  • 线程间交流管道
  • 缓存
  • 过滤
  • 读写文本
  • 读写基本类型数据(long, int...)
  • 读写对象
这些类的作用最好能够知道,这会使你在阅读Java IO类的时候更加容易理解。

3.Java IO类概览

在讨论完“源”、“目标”、输入、输出以及java IO不同类的不同作用之后,这里将会有一个几乎完整的JAVA IO类的列表,按照输入、输出、基于字符、基于字节、以及其他具体用途进行了分类:
  基于字节基于字符
  输入 输出 输入 输出
基本 InputStream OutputStream Reader
InputStreamReader
Writer
OutputStreamWriter
数组 ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter
文件 FileInputStream
RandomAccessFile
FileOutputStream
RandomAccessFile
FileReader FileWriter
管道 PipedInputStream PipedOutputStream PipedReader PipedWriter
缓存 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
过滤 FilterInputStream FilterOutputStream FilterReader FilterWriter
解析 PushbackInputStream
StreamTokenizer
  PushbackReader
LineNumberReader
 
字符串     StringReader StringWriter
数据 DataInputStream DataOutputStream    
数据 - 有格式的   PrintStream   PrintWriter
对象 ObjectInputStream ObjectOutputStream    
效用 SequenceInputStream      



译者注:有些地方现在看来仍然不能理解,但Jakob在之后的文章中都有具体的介绍,未完待续。
深信服PT1-AF实验考试 深信服PT1-AF实验考试实验练习可以去深信服的在线实验平台(链接如下):深信服在线实验平台 (sangfor.com.cn)实验考试其实就是把所有的每一部分实验综合了起来以下内容仅做参考,不确保一样。 阅读详情

相关推荐

COMSOL求解器实战:如何避免非线性问题求解失败(附牛顿法调试技巧)

本文深入探讨了COMSOL求解器在处理非线性问题时常见的失败原因及解决方案。通过分析物理模型非线性特性、初始条件敏感性和求解器参数配置,提供了牛顿法调试的黄金四步法,包括模型检查、分阶段求解、参数调优和高级诊断工具应用。特别针对材料非线性、几何非线性和多物理场耦合等典型工程场景,给出了实战技巧和预防性建模策略,帮助工程师有效避免求解失败。

weixin_29284657的博客 419

【JAVA】Java输入输出

在Java编程中,输入输出是程序与用户交互的核心桥梁,决定了数据如何流动、结果如何呈现。从控制台的简单信息录入到复杂应用的数据处理,输入输出机制贯穿始终。通过System类的标准流、Scanner的便捷读取,或的高效操作,开发者能够灵活应对不同场景的需求。然而,输入输出的细节中暗藏“陷阱”——如类型匹配错误、缓冲区残留等问题——稍有不慎便会导致程序崩溃或逻辑异常。

m0_68002296的博客 446

告别JTAG!用Artix-7和SPI Flash实现FPGA远程升级的保姆级教程

本文详细介绍了如何利用Artix-7 FPGA和SPI Flash实现FPGA远程升级(OTA)的完整方案。通过硬件连接、Vivado工程配置和STM32模拟更新等步骤,帮助开发者告别传统的JTAG烧录方式,实现高效、安全的远程固件更新,特别适用于嵌入式系统开发中的现场维护场景。

weixin_33964987的博客 364

学习Java第十六天:Java中的输入流和输出流

答:因为Scanner对象在创建的时候使用过了System.in,System.in默认就是键盘输入,只要在创建BufferedReader对象的时候,使用System.in就可以完成键盘输入,BufferedReader(Reader in)参数是Reader字符输入流,System.in是InputStream类型字节输入流。FileOutputStream(File file,boolean append) --- 通过File对象创建一个是否追加的字节输出流。

Java的第一人称视角 1031

Jetson Orin边缘语音AI实战:用Riva ASR/TTS + Llama 2打造离线智能语音助手

本文详细介绍了如何利用NVIDIA Jetson Orin的边缘计算能力,结合Riva ASR/TTS语音引擎和Llama 2大语言模型,构建完全离线的智能语音助手。通过硬件优化、量化部署和性能调优,实现在网络不稳定环境下的高效语音交互,适用于智能家居、车载系统等场景。

weixin_29053383的博客 242

小程序结合Three.js与gsap:打造流畅3D动画的完整指南

本文详细介绍了如何在小程序中整合Three.js与GSAP动画库,打造流畅的3D动画效果。通过从环境搭建、基础场景创建到模型加载与复杂动画编排的完整指南,帮助开发者克服小程序性能限制,实现如商品360度展示等沉浸式交互体验,提升产品视觉吸引力。

python9snake的博客 548

Java输入输出流详解

通过数据流、序列化和文件系统提供系统输入和输出。 Java把这些不同来源和目标的数据都统一抽象为数据流。Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。 在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流。 1.1、Java流

Java菜鸟 9万+

Oracle EBS FA 如何打开关闭的资产会计期间?

用户“运行折旧”,误勾选为“关闭期间”,还有一部分资产还需要操作报废和调整,希望后台打开关闭的资产会计期。

陈显平的专栏-Oracle EBS 1030

java回忆录—输入输出流详细讲解(入门经典)

今天我们开始进入学习 java 中比较让人头疼的事, 那就是 I/O 流、多线程、网络编程。这里对 I/O 流的一个详细讲解。希望对大家有点用吧。(不看后悔哦)一、什么是IOJava中I/O操作主要是指使用Java进行输入,输出操作。 Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源

minigeek的博客 2万+

【AI智能体】QClaw 对接GitHub处理自动化任务实战操作详解

QClaw 对接GitHub处理自动化任务实战操作详解

congge 4869

微信公众号 - 最新详细实现H5网页接入微信支付功能,开发移动端、PC端网站集成使用微信支付流程及示例代码,公众号网页利用JS-SDK/JSAPI/H5支付授权唤起微信支付,可脱离微信环境支付或内置浏

微信公众号,微信支付,网页,移动端,h5,扫码支付,二维码付款,手机网页,电脑pc网页生成支付二维码,js-sdk,jsapi,外部浏览器调起微信支付,脱离微信环境,在微信内置浏览器如何进行微信支付,前端H5微信支付,web网站,vue2,vue3,nuxt2,nuxt3,jquery,微信公众号h5支付流程,如何实现,怎么做,回调报错,redirect_uri参数错误,必须部署才能调试吗,怎么不打包发布就能在本机测试,微信H5支付能力,uniapp微信支付,h5页面调起支付,支付没反应,无效,失败,H5页

🏆 前端领域优质创作者 6103

Java 输入输出流教程(二)——【文件】(原作:Java IO Tutorial by Jakob Jenkov)

三、文件 文件是java程序中常用的源或目标。这篇文章会简要的介绍在java中对文件的处理,这里并没有细致的讲解技术,而是希望读者可以学习到用哪种方法去存取文件,接下来有几页会详细的介绍这些方法的使用和实例。 利用Java IO处理文件可能有一下几个方面: 读取文件写入文件随机存取文件存取文件、目录信息 通过Java IO读取文件 如果你需要从头到尾读取某一文件,使用File

smoooothly的专栏 812

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java 输入输出流教程(三)——【管道】(原作:Java IO Tutorial by Jakob Jenkov)

管道 Java IO中的管道提供了在同一个JVM下,两个线程之间的交流功能。同样,管道也是一个常见的源或目标。 Java中的管道概念与Unix/Linux中的管道有所不同,Unix/Linux中两个在不同空间下运行的进程可以通过pipe交换数据。在Java中,pipes必须要在同一个进程中的不同线程之间进行通讯。 利用Java IO建立管道 通过PipedOutputStream和Pipe

smoooothly的专栏 1117

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java IO Tutorial

Java IO Tutorial Java IO Tutorial — tutorials.jenkov.com — ReadabilityJava IO TutorialRead Later by Jakob Jenkov •Share...

115

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NIO introduction(1)(from Jakob Jenkov)

本系列是NIO基础的译篇,原文地址请戳: http://tutorials.jenkov.com/java-nio/index.html Java NIO (新NIO)是JavaIO的替代(从Java1.4 开始)。JavaNIO提供了一种有别的旧的标准IO的新的IO方式。 JavaNIO:Channels(通道)和(Buffers)缓冲 在旧IO的API中主要用到字节流、字符流,而在NI...

qq_30118563的博客 271

Java IO 经典教程 (上) (翻译自jenkov.com)

Java IO是java中的相关API,主要目的为读数据与写数据(input 和 output)。大部分的应用都需要处理一些输入数据,并且根据输入数据生成一些输出数据,比如说从文件或网络读取数据,然后写回文件或通过网络响应数据。 Java IO的相关API在Java IO包中(java.io)。如果你直接去java.io包中去看源代码,那么你会因为大量的代码而感到相当困惑。这些Java类的意图是什么?哪些类可以用来完

kopshome的专栏 2940

Java IO 经典教程 (下) (翻译自jenkov.com)

此系列文章翻译自Jakob Jenkov的java系列教程,原文地址链接为Jakob Jenkov的教程,教程比较详细,很适合初学者! 您可以查看 Java IO 经典教程 (上) (翻译自jenkov.com) 您可以查看 Java IO 经典教程 (中) (翻译自jenkov.com) 如果您更喜欢简书的风格,也可以点击链接:此文章简书链接 InputStreamReader

kopshome的专栏 710

Java IO 经典教程 (中) (翻译自jenkov.com)

PipedInputStreamPipedInputStream会以字节流的形式来读取管道的内容。同一JVM下的线程间通讯可以用到管道。管道的更多内容可以去查看前面的章节。PipedInputStream例子下面是一个相关的例子:InputStream input = new PipedInputStream(pipedOutputStream);int data = input.read(); w

kopshome的专栏 959

Java NIO Tutorial

Java NIO Tutorial

太阳火神的美丽人生 1863

java NIO系列:Java NIO Tutorial

Java NIO Tutorial Jakob Jenkov Last update: 2014-06-25      Java NIO (New IO) is an alternative IO API for Java (from Java 1.4), meaning alternative to the standardJava I

wzb56的资料库 580

Java NIO系列教程(二) Channel原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一 Java NIO的通道类似流,但又有些不同: 既可以从通

原文链接     作者:Jakob Jenkov     译者:airu     校对:丁一 Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。 正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:

DADADIE的专栏 1155

java nio_Java NIO系列教程(十二) Java NIO与IO

作者:Jakob Jenkov 译者:郭蕾 校对:方腾飞当学习了Java NIO和IO的API后,一个问题马上涌入脑海:我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。Java NIO和IO的主要区别下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。IO ...

weixin_29985807的博客 111

NIO资料

Java NIO 系列教程 原文地址 作者:Jakob Jenkov   译者:郭蕾    校对:方腾飞Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。Java NIO: Channels and Buffers(通道和缓冲区)标准的IO基于字节流和字符流进行操...

lovezhaohaimig的博客 166

Java WAR文件手工打包与优化实战指南

WAR(Web Application Archive)是Java Web应用部署的标准格式,本质上是一种特殊结构的ZIP文件。与JAR文件不同,WAR专为Web容器设计,包含WEB-INF/classes、WEB-INF/lib等特定目录。理解WAR打包原理对排查部署问题至关重要,尤其在构建工具出现兼容性问题时,掌握原生jar命令能快速解决问题。通过手工打包可以精确控制内容,适用于CI/CD流水线集成、多模块合并等场景。优化方面可采用分层打包、资源压缩等技术,结合Tomcat等容器的热部署特性,能显著提升

weixin_33904756的博客 183

Java NIO系列教程(一) Java NIO 概述

原文链接     作者:Jakob Jenkov     译者:airu     校对:丁一 Java NIO 由以下几个核心部分组成: ChannelsBuffersSelectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组

utf7的技术博客 1318

Java NIO系列教程(四) Scatter/Gather

Java NIO系列教程(四) Scatter/Gather 原文地址:http://tutorials.jenkov.com/java-nio/scatter-gather.html 作者:Jakob Jenkov   译者:郭蕾    Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中

wzb56的资料库 468
上一篇: Mysql5.6.10+ eclipse配置
下一篇: Java 输入输出流教程(二)——【文件】(原作:Java IO Tutorial by Jakob Jenkov)
smoooothly
博客等级 码龄18年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值