Java I/O全文摘要(七)过滤流,打印流

JAVA-I/O流-高级篇 的流作为io入门,下面是一些功能强大的流,能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等。这些功能更为强大的流,都是在基本的流对象基础之上创建而来的,相当于是对基本流对象的一种增强。 阅读详情

注意:打印一词的意思是:展现某种东西在你的屏幕上,而不是打印机的打印。


1 打印流

System.out和System.err都是java.io.PrintStream实例。

对控制台而言,PrintStream是无限制的,打印流是过滤流,所以它可以连接到任何其他输出流上面,如文件输出流(FileOutputStream),ByteArrayOutputStream, TelnetOutputStream或者其他任何可以写得流上面。

下面三个重载的构造方法用于指定打印流的实质的流是什么:



public PrintStream(OutputStream out)
public PrintStream(OutputStream out, boolean autoFlush)
public PrintStream(OutputStream out, boolean autoFlush, String encoding)
 throws UnsupportedEncodingException


自动刷新参数如果设置为true,则在接收到 \n 或者println( )方法调用,或者字节或字节数组被写入。编码参数指定了编码集。


Java5增加了更多的构造方法,就是为了便利

public PrintStream(String fileName) throws FileNotFoundException
public PrintStream(String fileName, String encoding)
 throws FileNotFoundException, UnsupportedEncodingException
public PrintStream(File file) throws FileNotFoundException
public PrintStream(File file, String encoding)
 throws FileNotFoundException, UnsupportedEncodingException

这些方法就是在后面又套了一层FileOutputStream而已。


2 打印字母

你喜欢使用PrintStream代替OutputStream的原因是为了print( ) 和println( )。

这些方法将在执行写入之前会以字符串的形式打印出来。举个例子,你要写入到numbers.dat的文件中。

PrintStream out = new PrintStream(new FileOutputStream("numbers.dat"));

假设,你有一个简单的写入循环:

for (int i = 0; i <= 127; i++) out.write(i);


当完成后,你发现文件包含了128个字节。第一个是0,然后1,2,3...它是纯净的2进制数据,如果你用文本编辑器打开它,会发现,很多很多字符无法显示出来(文本编辑器可能会尝试用ASCII编码方式来解析它)。因为,他们仅仅是byte,而不是可打印的东西。




如果我们不用write方法,而是用print()方法。输出将不是乱码。



注意,并不能保证以ASCII码方式输出,还取决于平台。


例子用了int,但实际上还有:

public void print(boolean b)
public void print(char c)
public void print(int i)
public void print(long l)
public void print(float f)
public void print(double d)
public void print(char[] s)
public void print(String s)
public void print(Object o)
public void println(boolean b)
public void println(char c)
public void println(int i)
public void println(long l)
public void println(float f)
public void println(double d)
public void println(char[] s)
public void println(String s)
public void println(Object o)

注意,对于引用类型,打印的是Object.toString(),对于原始类型,则是String.valueOf()。


3 换行符

不同平台是不同的:

  • On Unix (including Mac OS X), it's a linefeed, \n, ASCII 10.

  • On Mac OS 9, it's a carriage return, \r, ASCII 13.

  • On Windows, it's a carriage return linefeed pair, \r\n, ASCII 13 followed by ASCII 10.


考虑下面的方式,而不是println()

for (int i = 0; i <= 127; i++) {
  out.print(i);
  out.print("\r\n");
}

如果你想知道当前系统的换行符是啥子,你也可以调用:

String lineBreak = System.getProperty("line.separator");

并非所有的换行都是等价的。由于自动刷新的存在, \n才会刷, \r是不会的。


4 错误处理

由于打印流不抛出IO异常,所以

使用:

public boolean checkError( )

来检查错误,使用

protected void setError( )
来设置错误。


一旦错误被设置,无法重置它。

一旦错误,将悄无声息,所以它不适合绝大多数应用程序。


5 格式化打印

c语言风格的东西。

public PrintStream printf(String format, Object... args)


6 Formatter

 除了printf,打印流还有format方法

public PrintStream format(String format, Object... args)


format()用到了java.util.Formatter类

它的签名是:

public class Formatter implements Flushable, Closeable
此外:
Formatter 相当于C语言中的sprintf( ),fprintf( ) 但它是面向对象的。

不同的是,输出不是控制台,而是string, a file, or an output stream



Sparse4Dv3 instance_feature也设置为nn.Parameter。修正分支2*(linear->relu->linear->relu->layernorm)->linear->scale,分类分枝2*(linear->relu->layernorm)->linear(256,9),质量评估分枝2*(linear->relu->layernorm)->linear(256,2)。每组两类instance,1是加上范围(-x,x)内均匀分布噪声,2是加上(-2x,-x)U(x,2x)范围内均匀分布噪声。 阅读详情

相关推荐

Allegro File菜单实战指南:从导入网表到导出BOM的完整流程

PCB设计离不开对EDA软件菜单体系的深入理解。在Cadence Allegro中,File菜单是数据流转的中枢,它不仅是新建、打开、保存的基础入口,更是连接原理图与版图、设计与制造的关键桥梁。工程师常遇到的“导入网表报错”“导出BOM为空”“板框不闭合”等高频问题,大多源于对File菜单中Import与Export功能的理解不到位。从基础概念出发,先厘清Import(网表、DXF、IPC)与Export(BOM、ODB++、DXF)的工作原理,再结合版本兼容、封装库路径、单位设置等工程细节,即可构建完整的

weixin_32950759的博客 294

java7中的List中使用filter过滤出符合特定条件的元素List

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33958366的博客 4933

数学文化赏析MOOC笔记【2023】

深圳大学UOOC课程《数学文化赏析》课程笔记

simplenthpower的博客 1747

【Java】I/O 流篇 —— 打印流与压缩流

分类:打印流一般是指字节打印流 PrintStream、字符打印流 PrintWriter 两个类,打印流只有输出流没有输入流打印流只操作文件的目的地,不操作数据源特有的写出方法可以实现数据原样写出文件中是 97,打印 97文件中是 true,打印 true特有的写出方法,可以实现自动刷新,自动换行打印一次数据 = 写出 + 换行 + 刷新。

m0_72516377的博客 1476

AI算力网络与通信领域QoS保障的测试方法

在当今数字化时代,AI技术蓬勃发展,AI算力网络应运而生。它将分布在不同地理位置的算力资源进行整合,以高效地支持各种AI应用,如深度学习训练、智能图像识别等。而通信领域则是信息传输的基石,确保数据能够准确、快速地在不同节点之间传递。QoS保障在通信领域至关重要,它可以确保不同类型的业务(如语音通话、视频会议、在线游戏等)获得与其需求相匹配的服务质量。在AI算力网络中,QoS保障同样不可或缺,因为AI任务对网络的带宽、延迟、可靠性等指标有严格要求。

AI算力网络与通信的博客 526

被搜狗输入法背刺了!偷偷装的 “AI 汪仔” 狂占 CPU!手把手教你如何彻底关闭删除搜狗AI功能AI汪仔

手把手教你如何彻底关闭删除搜狗输入法的AI汪仔🚀

XiaoqiangClub的博客 2万+

Java 输入与输出(I/O)流之装饰流【处理流】

按照Java 输入与输出(I/O)流的处理功能:I/O流可分为低级的节点流和高级的装饰流(又称处理流)。 - 节点流是直接从数据源(数据源可以是文件、数组、内存或网络)读/写数据的输入输出流; - 装饰流(又称处理流),是指用于对一个已存在的输入输出流进行装饰的流,装饰流在不改变数据信息的情况下添加额外的增强功能。因为装饰流不会直接连接到实际的数据源,不能够直接获取数据,所以构建一个装饰流时,需要在构造函数中传入一个节点流。装饰流可进行多层嵌套装饰。

weixin_42369079的博客 1043

展锐 Android 15 无听筒方案删除配置

【代码】展锐 Android 15 无听筒方案删除配置。

m0_60898338的博客 165

JavaEE 初阶篇-深入了解 I/O 高级流(缓冲流、交换流、数据流和序列化流)

缓冲流(Buffered Stream)来提高 I/O 操作的效率,缓冲流是对字节流和字符流的一种封装,通过缓冲区来减少 I/O 操作的次数,从而提高程序的运行效率。简单来说,InputStreamReader 将读取的字节流转化为字符流,并且如果读取的是用 GBK 编码集进行编码的,在 UTF 环境下进行编码时,则需要指定用 GBK 编码集进行编码。序列化流是 Java I/O 中的一种特殊流,用于将对象转换为字节序列以便存储或传输,或将字节序列转换回对象。主要是为了,方便取数据而不是给程序员看的。

小扳手 2948

如何通过单步调试的方法,找到 SAP Gateway 到底把 Fiori 应用发送的 OData 请求,投递到哪一台 ABAP 后台服务器了?

这是一个 Count 请求,得到服务器响应的数据是 204,这个 204 会以数字的形式,显示在 Fiori Launchpad tile 上。那如果当前 Gateway 系统可以连接到多台 ABAP 后台服务器,比如下图所示,可以连接 SAP S/4HANA,ERP 或者 SAP CRM,我怎么知道 SAP UI5 应用上显示的数据,到底来自哪一台 ABAP 后台服务器呢?,就是上图 ABAP 调试器里断点停留的位置,即 SAP Frontend 服务器,通过 RFC 将 OData 请求投递给。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 640

【基于 CasADi 的欠驱动无人船实时非线性模型预测控制(NMPC)实现 Visual Studio 2022 C++】

本文介绍了基于CasADi和IPOPT在Visual Studio 2022 C++环境下实现的欠驱动无人船实时非线性模型预测控制(NMPC)方案。文章详细阐述了NMPC基本原理、欠驱动无人船动力学模型(包含状态变量和控制变量定义),并给出了C++实现的核心代码框架。该方案通过显式引入系统动力学模型和约束条件,在每个采样周期滚动优化控制序列,有效解决了欠驱动无人船的轨迹跟踪与避碰问题。文中还提供了VS2022配置CasADi环境的详细步骤,包括预编译包下载、工程属性设置等关键环节,为工程实现提供了完整的技术

vor234的博客 650

Java I/O 流完整指南

Java I/O 流体系是处理数据输入输出的核心工具,涵盖从基础字节流到高性能NIO的全场景解决方案。理解流的设计模式:装饰器模式实现功能扩展。正确选择流类型:字节流处理二进制,字符流处理文本。掌握NIO非阻塞模型:适用于高并发网络服务。严格资源管理:使用避免泄漏。性能优化:缓冲、分块处理、零拷贝技术。通过合理应用这些知识,可以构建高效、健壮的I/O密集型应用。

千层冷面的博客 992

Modbus RTU 详解 + FreeMODBUS移植(附项目源码)

本文全面解析Modbus RTU通信协议,详细介绍其报文格式、功能码定义及典型应用场景,并手把手指导如何将FreeMODBUS协议栈移植到嵌入式平台。内容涵盖从底层硬件驱动配置、协议栈移植到主机/从机通信测试的全流程,重点讲解移植过程中的常见问题及解决方案。文章最后提供经过实测的完整项目源码,帮助开发者快速实现稳定的Modbus RTU通信功能。

Bit_Dong的博客 2926

I/O 流

I/O指的是Input/Output,IO流:输入输出流。统称为。在Java程序中,对于数据的输入 / 输出操作以流的方式进行;流是从起源到接收的有序数据。JDK提供了各种各样的流类,用以获取不同种类的数据;

m0_74064480的博客 880

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

printf打印short字节_Java I/O 流之打印流

一、打印流概述 打印流是 java.io 包中输出信息最方便的一个类,主要包括字节打印流(PrintStream)和字符打印流(PrintWriter)。打印流添加输出数据的功能,使它们能够方便地打印各种数据值表示形式,打印流可以打印出任何数据类型,例如:小数、整数、字符串等。 PrintStream、PrintWriter 的方法名是完全一致的,一般用PrintWrite...

weixin_39991055的博客 498

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

I/O流详解

I/O(Input/Output)流是 Java 编程中用于处理输入和输出操作的一种机制。在计算机编程中,输入指的是从外部获取数据的过程,输出则是将数据发送到外部的过程。I/O 流提供了一种统一的方式来处理不同类型的数据输入和输出,无论是文件、网络连接、内存等,都可以通过 I/O 流进行读写操作。I/O 流中常用的是字节流和字符流,它们用于处理不同类型的数据:字节流用于处理二进制数据,字符流用于处理文本数据。

2301_77760093的博客 1367

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

I/O流基础

从源头(通常是文件)读取数据(字节信息)到内存的过程中不会一个字节一个字节的读取,而是会先将读取到的字节存放在缓存区,并从内部缓冲区中单独读取字节。将数据(字节信息)写入到目的地(通常是文件)的过程中不会一个字节一个字节的写入,而是会先将要写入的字节存放在缓存区,并从内部缓冲区中单独写入字节。由于字节缓冲流内部有缓冲区(字节数组),因此,字节缓冲流会先将读取到的字节存放在缓存区,大幅减少 IO 次数,提高读取效率。因此,I/O 流就干脆提供了一个直接操作字符的接口,方便我们平时对字符进行流操作。

午夜后是黎明,风雨后是骄阳 938

java回忆录—I/O流详解补充

上一篇文章中我们对java中的 I/O 流进行了一个详细的讲解,但是只是带大家讲了几个常用的流,今天再对其他几个流作个补充介绍。PrintWriter 、PrintStreamInputStreamWriter 、OutputStreamWriterPipedInputStream 、 PipedOutputStream SequenceInputStreamDataInputStream 、Dat

minigeek的博客 2020

I/O流 ———— 打印流和缓冲流

字节字符输入输出流 ** 以下内容均可以直接运行 ** 简介 缓冲流和打印流都是为了 提高输入输出流的效率 而出现的 缓冲流 原本的输入输出流是通过while一个一个字节或者一个一个字符打印文本的,这样做会让计算机和文件频繁的发生数据连接,这样做得效率很低下,所以出现了 缓冲流 把要输出的文字先存放在缓存中,当缓存满时一起写入(缓存默认的大小为8KB) 打印流 原本的要用多行语句打印,现在只要用...

qq_33021025的博客 318

Java—文件I/O操作

大多数的应用程序都需要与外部的输入/输出设备I/O(Input/Output)进行数据交换。在Java中,所有的I/O机制都是基于数据“流”方式进行输入/输出。这些“数据流”可视为同一台计算机不同设备或网络中不同计算机之间流动的数据序列。如同水管里的水流一样,在水管的一端一点一滴地供水,而在水管的另一端看到的是一股连续不断的水流。 Java把这些不同来源和目标的数据统一抽象为“数据流”。当Java程序需要读取数据时,就会开启一个通向数据源的流,这个数据源可以是文件、内存、也可以是网络连接。而当Java程序需

LiLi的博客 3478

I/O流总结

File封装的对象仅仅是一个路径名,这个路径可以是存在的,也可以是不存在的。创建文件夹:删除文件夹:1、当主调是文件,或者路径不存在时,返回null2、当主调时空文件夹时,返回一个长度为0的数组3、当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回4、当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在FIle数组中返回,包含隐藏文件5、当主调是一个文件夹,但是没有权限访问该文件夹时,返回null。

m0_73756512的博客 1045

Java I/O流--下

Java标准压缩解压APIZipEntry:压缩包中的文件/目录表示递归遍历:处理嵌套文件夹结构的关键技术:条目操作的核心方法。

m0_75010111的博客 968

Java I/O面试题

从源头(通常是文件)读取数据(字节信息)到内存的过程中不会一个字节一个字节的读取,而是会先将读取到的字节存放在缓存区,并从内部缓冲区中单独读取字节。将数据(字节信息)写入到目的地(通常是文件)的过程中不会一个字节一个字节的写入,而是会先将要写入的字节存放在缓存区,并从内部缓冲区中单独写入字节。异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。中有一个文件指针用来表示下一个将要被写入或者读取的字节所处的位置。

m0_46433333的博客 1186

Java I/O流(二)

转换流属于字符流。

2301_76580356的博客 732

Java I/O流

文章目录Java I/O流二、 流的分类2.1 InputStream (典型实现:**FileInpugStream**)2.2 Reader (典型实现:**FileReader**)2.3 OutPutStream2.4 Writer三、节点流(或文件流)3.1读取文件3.2 写入文件3.3 注意事项四、处理流4.1 缓冲流(处理流之一)4.2 转换流(处理流之二)4.3 打印流(标准流之三...

SUNBO、的博客 776

Java I/O 流详解(Basic I/O)

一个 I/O 流代表一个输入源或输出目的地。一个流可以表示许多不同类型的输入源和输出目的地,比如磁盘文件、设备、其他程序和存储阵列。流支持许多不同类型的数据,比如字节(字节流)、基本数据类型(数据流)、字符串(字符流)和对象(对象流)。有些流只是简单地传递数据;而有些流则能以有效的方式使用和转换数据。不管流在内部是如何工作的,所有流在程序中都是一个数据序列。

swadian2008的博客 506
上一篇: Proguard手册(少量进行了中文翻译)
下一篇: Java I/O全文摘要(八)过滤流,数据流
computer165
博客等级 码龄16年 7粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值