浅谈java输入输出流

锐浪报表 Grid++Report 子报表 Delphi 锐浪报表 Grid++Report 是国内较好的报表控件,本人一直使用它,做出很多特色的报表。可以说你的报表设计出来,它基本上能做出来。 但是它帮助文件上,说的不深,近期因为要做一个有关社工的报表,大表中,嵌套2个子表。可以说,一个表到三个数据集,分别打印。 在认真看了帮助的基础上,网上探索,基本无此类,特别是Delphi的帮助,几乎为零。经二天摸索,做出来了。 一、设计思路 1、大表和二个小表,可以设计为三个表,分别使用三个GridppReport控件,取名... 阅读详情

 

浅谈java输入输出流

浅谈java输入输出流 2007-05-06 21:18:49 阅读1336 评论1 字号:大中小

stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Inputstream和Out stream)都包括两种类型:

(1)字节流

  表示以字节为单位从stream中读取或往stream中写入信息,即io包中的inputstream类和outputstream类的派生类。通常用来读取二进制数据,如图象和声音。

(2)字符流

以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。

区别:

Reader和Writer要解决的,最主要的问题就是国际化。原先的I/O类库只支持8位的字节流,因此不可能很好地处理16位的Unicode字符流。Unicode是国际化的字符集(更何况Java内置的char就是16位的Unicode字符),这样加了Reader和Writer之后,所有的I/O就都支持Unicode了。此外新类库的性能也比旧的好。

但是,Read和Write并不是取代InputStream和OutputStream,有时,你还必须同时使用"基于byte的类"和"基于字符的类"。为此,它还提供了两个"适配器(adapter)"类。InputStreamReader负责将InputStream转化成Reader,而OutputStreamWriter则将OutputStream转化成Writer。

一.流的层次结构

定义:

(1)       java将读取数据对象成为输入流,能向其写入的对象叫输出流。结构图如下:输入流:

输出流

二.InputStream类

inputstream类和outputstream类都为抽象类,不能创建对象,可以通过子类来实例化。

InputStream是输入字节数据用的类,所以InputStream类提供了3种重载的read方法.Inputstream类中的常用方法:

(1)       public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。

 

(2)       public int read(byte  b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的

 

(3)       public int read(byte  b[ ], int  off, int  len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。

 

(4)       public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用,

 

(5)       public long skip(long  n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取

 

(6)       public int close( ) :我们在使用完后,必须对我们打开的流进行关闭.

三.OutputStream类

OutputStream提供了3个write方法来做数据的输出,这个是和InputStream是相对应的。

 

1.  public void write(byte  b[ ]):将参数b中的字节写到输出流。

2. public void write(byte  b[ ], int  off, int  len) :将参数b的从偏移量off开始的len个字节写到输出流。

3. public abstract void write(int  b) :先将int转换为byte类型,把低字节写入到输出流中。

4. public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。

5. public void close( ) : 关闭输出流并释放与流相关的系统资源。

 

注意:

1. 上述各方法都有可能引起异常。

2.  InputStream和OutputStream都是抽象类,不能创建这种类型的对象。 

四.FileInputStream类

FileInputStream类是InputStream类的子类,用来处理以文件作为数据输入源的数据流。使用方法:

方式1:

File fin=new File("d:/abc.txt");

   FileInputStream  in=new FileInputStream(fin);

方式2:

   FileInputStream  in=new

            FileInputStream("d: /abc.txt");

方式3:

构造函数将 FileDescriptor()对象作为其参数。

FileDescriptor() fd=new FileDescriptor();

FileInputStream f2=new FileInputStream(fd);

 

五.FileOutputStream类

FileOutputStream类用来处理以文件作为数据输出目的数据流;一个表示文件名的字符串,也可以是File或FileDescriptor对象。

创建一个文件流对象有两种方法:

方式1:

File f=new File("d:/abc.txt");

FileOutputStream  out=new FileOutputStream (f);

方式2:

   FileOutputStream out=new

       FileOutputStream("d:/abc.txt");

方式3:构造函数将 FileDescriptor()对象作为其参数。

FileDescriptor() fd=new FileDescriptor();

FileOutputStream f2=new FileOutputStream(fd);

方式4:构造函数将文件名作为其第一参数,将布尔值作为第二参数。

FileOutputStream f=new FileOutputStream("d:/abc.txt",true);

注意:

(1)文件中写数据时,若文件已经存在,则覆盖存在的文件;(2)的读/写操作结束时,应调用close方法关闭流。

 

举例:2-1

六.File类

File类与InputStream / OutputStream类同属于一个包,它不允许访问文件内容。

File类主要用于命名文件、查询文件属性和处理文件目录。

举例:2-2

七.从一个流构造另一个流

java的流类提供了结构化方法,如,底层流和高层过滤流。

而高层流不是从输入设备读取,而是从其他流读取。同样高层输出流也不是写入输出设备,而是写入其他流。

使用"分层对象(layered objects)",为单个对象动态地,透明地添加功能的做法,被称为Decorator Pattern。Decorator模式要求所有包覆在原始对象之外的对象,都必须具有与之完全相同的接口。这使得decorator的用法变得非常的透明--无论对象是否被decorate过,传给它的消息总是相同的。这也是Java I/O类库要有"filter(过滤器)"类的原因:抽象的"filter"类是所有decorator的基类。Decorator模式常用于如下的情形:如果用继承来解决各种需求的话,类的数量会多到不切实际的地步。Java的I/O类库需要提供很多功能的组合,于是decorator模式就有了用武之地。

为InputStream和OutputStream定义decorator类接口的类,分别是FilterInputStream和FilterOutputStream。

7.1 FilterInputStream

 

FilterInputStream的种类

 

 

类

功能

构造函数的参数

 

 

用法

DataInputStream

与DataOutputStream配合使用,这样你就能以一种"可携带的方式(portable fashion)"从流里读取primitives了(int,char,long等)

InputStream

 

 

包含了一整套读取primitive数据的接口。

BufferedInputStream

用这个类来解决"每次要用数据的时候都要进行物理读取"的问题。你的意思是"用缓冲区。"

InputStream,以及可选的缓冲区的容量

 

 

它本身并不提供接口,只是提供一个缓冲区。需要连到一个"有接口的对象(interface object)"。

LineNumberInputStream

跟踪输入流的行号;有getLineNumber( )和setLineNumber(int)方法

InputStream

 

 

只是加一个行号,所以还得连一个"有接口的对象"。

PushbackInputStream

有一个"弹压单字节"的缓冲区(has a one byte push-back buffer),这样你就能把最后读到的那个字节再压回去了。

InputStream

 

 

主要用于编译器的扫描程序。可能是为支持Java的编译器而设计的。用的机会不多。

 

 

FilterOutputStream的种类

 

 

类

功能

构造函数的参数

 

 

用法

DataOutputStream

与DataInputStream配合使用,这样你就可以用一种"可携带的方式(portable fashion)"往流里写primitive了(int, char, long,等)

OutputStream

 

 

包括写入primitive数据的全套接口。

PrintStream

负责生成带格式的输出(formatted output)。DataOutputStrem负责数据的存储,而PrintStream负责数据的显示。

一个OutputStream以及一个可选的boolean值。这个boolean值表示,要不要清空换行符后面的缓冲区。

 

 

应该是OutputStream对象的最终包覆层。用的机会很多。

BufferedOutputStream

用 这个类解决"每次往流里写数据,都要进行物理操作"的问题。也就是说"用缓冲区"。用flush( )清空缓冲区。

OutputStream, 以及一个可选的缓冲区大小

 

 

本身并不提供接口,只是加了一个缓冲区。需要链接一个有接口的对象。

 

 

DataInputStream类对象可以读取各种类型的数据。

DataOutputStream类对象可以写各种类型的数据;

创建这两类对象时,必须使新建立的对象指向构造函数中的参数对象。例如:

FileInputStream in=new FileInputStream("d:/abc.txt");

DataInputStream  din=new DataInputStream(in);

7.2BufferInputStream和bufferOutputStream

允许程序在不降低系统性能的情况下一次一个字节的从流中读取数据。

BufferInputstream定义了两种构造函数

(1)       BufferInputStream  b= new BufferInputstream(in);

(2)       BufferInputStream b=new BufferInputStream(in,size)

  第二个参数表示指定缓冲器的大小。

同样BufferOutputStream也有两种构造函数。一次一个字节的向流中写数据。

 

7.3printstream

用于写入文本或基本类型

两种构造函数方法:

PrintStream ps=new PrintStream(out);

PrintStream ps=new PrintStream(out, autoflush)

第二个参数为布尔值,控制每次输出换行符时java是否刷新输出流。

 

 

 

八.字符流的读取和写入

java.io.Reader 和 java.io.InputStream 组成了 Java 输入类。Reader 用于读入16位字符,也就是 Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。

Reader的体系结构

(1)       FileReader

   FileReader主要用来读取字符文件,使用缺省的字符编码,有三种构造函数:

  --将文件名作为字符串

   FileReader f=new FileReader(“c:/temp.txt”);

--构造函数将File对象作为其参数。

  File f=new file(“c:/temp.txt”);

FileReader f1=new FileReader(f);

--构造函数将FileDescriptor对象作为参数

FileDescriptor() fd=new FileDescriptor()

FileReader f2=new FileReader(fd);

(2)    charArrayReader

  将字符数组作为输入流,构造函数为:

public CharArrayReader(char[] ch);

(3)    StringReader

  读取字符串,构造函数如下:

public StringReader(String s);

(4)    InputStreamReader

从输入流读取字节,在将它们转换成字符。

 Public inputstreamReader(inputstream is);

(5)    FilterReader

允许过滤字符流

protected filterReader(Reader r);

(6)    BufferReader

  接受Reader对象作为参数,并对其添加字符缓冲器,使用readline()方法可以读取一行。

Public BufferReader(Reader r);

 

Writer类体系结构

(1)       FileWrite

   将字符类型数据写入文件,使用缺省字符编码和缓冲器大小。

Public FileWrite(file f);

(2)chararrayWrite()

   将字符缓冲器用作输出。

  Public CharArrayWrite();

(3)    PrintWrite

  生成格式化输出

public PrintWriter(outputstream os);

(4)    filterWriter

  用于写入过滤字符流

protected FilterWriter(Writer w);

 

 

FilterOutputStream的种类

 

 

类

功能

构造函数的参数

 

 

用法

DataOutputStream

与DataInputStream配合使用,这样你就可以用一种"可携带的方式(portable fashion)"往流里写primitive了(int, char, long,等)

OutputStream

 

 

包括写入primitive数据的全套接口。

PrintStream

负责生成带格式的输出(formatted output)。DataOutputStrem负责数据的存储,而PrintStream负责数据的显示。

一个OutputStream以及一个可选的boolean值。这个boolean值表示,要不要清空换行符后面的缓冲区。

 

 

应该是OutputStream对象的最终包覆层。用的机会很多。

BufferedOutputStream

用 这个类解决"每次往流里写数据,都要进行物理操作"的问题。也就是说"用缓冲区"。用flush( )清空缓冲区。

OutputStream, 以及一个可选的缓冲区大小

 

 

本身并不提供接口,只是加了一个缓冲区。需要链接一个有接口的对象。

 

 

DataInputStream类对象可以读取各种类型的数据。

DataOutputStream类对象可以写各种类型的数据;

创建这两类对象时,必须使新建立的对象指向构造函数中的参数对象。例如:

FileInputStream in=new FileInputStream("d:/abc.txt");

DataInputStream  din=new DataInputStream(in);

7.2BufferInputStream和bufferOutputStream

允许程序在不降低系统性能的情况下一次一个字节的从流中读取数据。

BufferInputstream定义了两种构造函数

(1)       BufferInputStream  b= new BufferInputstream(in);

(2)       BufferInputStream b=new BufferInputStream(in,size)

  第二个参数表示指定缓冲器的大小。

同样BufferOutputStream也有两种构造函数。一次一个字节的向流中写数据。

 

7.3printstream

用于写入文本或基本类型

两种构造函数方法:

PrintStream ps=new PrintStream(out);

PrintStream ps=new PrintStream(out, autoflush)

第二个参数为布尔值,控制每次输出换行符时java是否刷新输出流。

 

 

 

八.字符流的读取和写入

java.io.Reader 和 java.io.InputStream 组成了 Java 输入类。Reader 用于读入16位字符,也就是 Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。

Reader的体系结构

(1)       FileReader

   FileReader主要用来读取字符文件,使用缺省的字符编码,有三种构造函数:

  --将文件名作为字符串

   FileReader f=new FileReader(“c:/temp.txt”);

--构造函数将File对象作为其参数。

  File f=new file(“c:/temp.txt”);

FileReader f1=new FileReader(f);

--构造函数将FileDescriptor对象作为参数

FileDescriptor() fd=new FileDescriptor()

FileReader f2=new FileReader(fd);

(2)    charArrayReader

  将字符数组作为输入流,构造函数为:

public CharArrayReader(char[] ch);

(3)    StringReader

  读取字符串,构造函数如下:

public StringReader(String s);

(4)    InputStreamReader

从输入流读取字节,在将它们转换成字符。

 Public inputstreamReader(inputstream is);

(5)    FilterReader

允许过滤字符流

protected filterReader(Reader r);

(6)    BufferReader

  接受Reader对象作为参数,并对其添加字符缓冲器,使用readline()方法可以读取一行。

Public BufferReader(Reader r);

 

Writer类体系结构

(1)       FileWrite

   将字符类型数据写入文件,使用缺省字符编码和缓冲器大小。

Public FileWrite(file f);

(2)chararrayWrite()

   将字符缓冲器用作输出。

  Public CharArrayWrite();

(3)    PrintWrite

  生成格式化输出

public PrintWriter(outputstream os);

(4)    filterWriter

  用于写入过滤字符流

protected FilterWriter(Writer w);

 

源文档 <http://cyp-034.blog.163.com/blog/static/2823190520074691849380/>

从零到一:基于K375S主控的机械键盘优联无线化改造实战 本文详细记录了基于罗技K375S主控进行机械键盘优联无线化改造的全过程。从改造动机、核心原理与物料准备,到电路设计、PCB打样、焊接调试,逐步拆解了将优联技术集成到自定义机械键盘中的实战步骤。项目最终实现了低延迟、高稳定性且支持多设备连接的优联无线机械键盘,为DIY爱好者提供了高性价比的改造方案。 阅读详情

相关推荐

思博伦Spirent TestCenter创建单播流uni-stream

Traffic Generator列表中会出现刚才创建的uni-stream,创建完成。通常测试情况下,主要对Ethenet II和IPv4 Header进行配置。(通常情况下,如果流配置比较规范,选择任意端口接收,也没问题。编辑uni-stream基本信息。配置本条流由STC哪个端口接收。

辗转反测的博客 1683

Java 输入输出流的一些理解

Java的OutputStream定义了基本的输入输出流,是基础抽象类,可以派生出多种不同类型的流。 而FilterOutputStream 继承了OutputStream,其初始化则是构建在已经存在的流上,可以连接已经存在的流; FilterOutputStream则继承了FilterOutputStream,是输出的流,可以直接连接已经初始化的流,比如说,通过Socket建立的通道的流上。

张然的博客 1469

Uds诊断自动化(CANoe.diva应用)

(7)其他配置选择可以保持默认(一般情况下,DTC以及31服务、下载服务需要另外测试)。(1)打开CANoe.Diva软件,并新建Diva工程。(2)设置工程名和保存位置;在"Specification file"(3)测试案例打开后的界面如下,可以对要进行测试的案例进行勾选,(可查看下角的进度条)后;(3)等待DIva工程的生成;(4)接下来是修改Diva工程选项,如下图点击。,如用例间的时间间隔、复位等待时间等。,即可打开导入的测试工程。,即可生成测试用例。(1)在CANoe中。

LIUJIAAAAA的博客 3445

浅谈Java的输入输出流

Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家做一个简要的介绍。   流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,

999

SPI 协议帧格式深度解析:从 8 位数据到 16 位扩展的 3 种模式

本文深入解析SPI协议的帧格式,涵盖从8位标准到16位扩展的三种模式。通过详细讲解SPI时钟模式、数据宽度配置及实际应用案例,帮助开发者掌握SPI外设的深度定制能力,提升嵌入式系统开发效率。特别适用于连接传感器、存储器和显示器等高速通讯场景。

weixin_34110749的博客 346

图文带你理解什么是Few-shot Learning

Few-shot Learning(少样本学习)是Meta Learning(元学习)中的一个实例1,所以在了解什么是Few-shot Learning之前有必要对Meta Learning有一个简单的认识。不过在了解什么是Meta Learning之前还是要了解一下什么是Meta。因此,阅读本文后你将对如下知识有一个初步的了解。 What is Meta What is Meta Learning What is Few-shot Learning 1. What is Meta? meta就是描述

Pr4da的博客 1万+

java输入输出流课程_浅谈Java的输入输出流

1.BufferedReader是Reader的一个子类,它具有缓冲的作用,避免了频繁的从物理设备中读取信息。它有以下两个构造函数:BufferedReader(Readerin)BufferedReader(Readerin,intsz)这里的sz是指定缓冲区的大小。它的基本方法:voidclose()//关闭流voidmark(int readAheadLimit)//标记当前位置b...

weixin_34404671的博客 131

大数据学习指南从入门到精通

利用框架的力量,看懂游戏规则,才是入行的前提大多数人不懂,不会,不做,才是你的机会,你得行动,不能畏首畏尾选择才是拉差距关键,风向,比你流的汗水重要一万倍,逆风划船要累死人的为什么选择学习大数据开发,不选择Java开发?借棋弈做比喻,智商高的不要选择五子琪,要选择围棋,它能长久地吸引你。不都是在棋盘上一颗黑子一颗白子地下吗?因为围棋更复杂,能够掌握如此复杂的技艺、产生稳定输出的棋手、让我们更佩服。选择学习大数据开发也如此,能让你的职业生涯走得更远,少走弯路。

Lansonli(蓝深李)的博客 2万+

JAVA之浅谈输入输出流

在JAVA中输入输出流提供了一条通道,用户可以通过该通道对数据源进行读取或者传送;输入流可以通过read()方法读取;输出流可以通过write()方法进行传送; 其中我就来说说InputStream和OutputStream类;这两个对象都是字节流类,他们的子类都分别继承了read()和write()方法;当需要从输入输出流里读取数据或者传送数据时,创建一个InputStream或者OutputS...

Myueye的博客 219

联想开天N70z/N79Z G1d笔记本Win驱动下载

本文介绍了联想开天N70Z/N79Z G1d笔记本在Win11系统下的驱动安装方法。提供了WiFi网卡驱动(RealtekWlan)和显卡驱动(ZX C960 GPU)的详细安装步骤,包括手动更新驱动和卸载流程。驱动安装后成功支持5G WiFi连接并正确识别显卡型号。文中附有系统信息和安装效果截图,同时提供了官方驱动下载地址及备用下载链接。该指南适用于需要为联想开天N70Z/N79Z G1d笔记本安装Win11驱动的用户参考。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 3890

UG\NX二次开发 找不到指定的dlx文件(Specified Dlx file not found)

有群友问:用Ctrl+U运行的时候就报错,找不到指定的dlx文件Specified Dlx file not found。怎么处理。

王牌飞行员_里海的博客 1131
上一篇: Java开发工具Java IDE - Gel和Jcreator使用技巧总结
下一篇: [Java]重载,重写以及继承,多态的区别
codecooler
博客等级 码龄19年 47粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值