JAVA输入输出流--字节流篇(什么时候用哪个)

合集下载

java输入输出流实验报告总结

java输入输出流实验报告总结

java输入输出流实验报告总结Java输入输出流是Java中非常重要的概念,也是Java程序设计的基础。

在Java 程序中,输入输出流用于处理与设备之间的数据传输,例如键盘、鼠标、文件等。

Java的输入输出流主要包含两种类型:字节流和字符流。

字节流以字节为最小读写单位,而字符流以字符为最小读写单位。

Java的输入流有很多种类型,例如:InputStream、ByteArrayInputStream、FileInputStream等。

这些输入流的共同特点是读取外部数据到程序中。

Java的输出流也有多种类型,例如:OutputStream、ByteArrayOutputStream、FileOutputStream等。

这些输出流的共同特点是将程序中的数据输出到外部。

下面将以实验报告的形式进行总结,详细介绍Java输入输出流的原理和使用方法。

实验一:字节流输入输出1. 实验目的:掌握字节流输入输出的基本使用方法。

2. 实验内容:编写一个程序,实现从文件中读取数据,然后将数据输出到另一个文件中。

3. 实验步骤:a. 创建一个输入流对象,用于读取原始文件的数据。

b. 创建一个输出流对象,用于将读取到的数据输出到目标文件中。

c. 循环读取输入流中的数据,直到读取到文件末尾。

d. 将读取到的数据写入输出流中。

e. 关闭输入流和输出流。

4. 实验结果:成功读取原始文件中的数据,并将数据输出到目标文件中。

实验二:字符流输入输出1. 实验目的:掌握字符流输入输出的基本使用方法。

2. 实验内容:编写一个程序,实现从键盘输入文字,然后将文字输出到屏幕上。

3. 实验步骤:a. 创建一个字符输入流对象,用于读取键盘输入的文字。

b. 创建一个字符输出流对象,用于将读取到的文字输出到屏幕上。

c. 循环读取输入流中的文字,直到读取到换行符。

d. 将读取到的文字写入输出流中。

e. 关闭输入流和输出流。

4. 实验结果:成功从键盘输入文字,并将文字输出到屏幕上。

字节流与字符流的区别与使用场景分析

字节流与字符流的区别与使用场景分析

字节流与字符流的区别与使用场景分析在Java编程中,字节流和字符流是对数据进行读写操作时经常用到的两种流。

虽然它们都可以用来进行数据的输入和输出,但是在使用方式和适用场景上存在一些区别。

本文将对字节流和字符流进行比较,并分析它们的使用场景。

字节流字节流主要操作的是字节数据,它们以字节为单位进行读写。

在Java中,字节流主要包括InputStream和OutputStream两个基类。

字节流适合处理二进制数据或者无法直接用文本表示的数据,如音频、视频等文件。

字节流的读写操作比较简单、高效,适合处理大量数据。

但是由于是以字节为单位进行操作,因此在处理字符数据时并不方便,需要手动进行字符与字节的转换。

字符流字符流主要操作的是字符数据,它们以字符为单位进行读写。

在Java中,字符流主要包括Reader和Writer两个基类。

字符流适合处理文本数据,对字符数据的操作更为方便。

字符流在处理字符数据时会自动进行字符编码和解码工作,使得读写操作更加简便。

字符流适合处理文本文件、配置文件等情况下的读写操作。

区别与使用场景1.数据单位:字节流以字节为单位进行读写,适用于二进制数据处理;字符流以字符为单位进行读写,适用于文本数据处理。

2.处理效率:字节流具有较高的读写效率,适合处理大量二进制数据;字符流在处理文本数据时更为方便,可以自动进行字符编码和解码。

3.适用场景:字节流适合处理音频、视频、图片等二进制数据;字符流适合处理文本文件、配置文件等文本数据。

4.编程习惯:一般情况下,对于处理文本数据,建议使用字符流进行处理;对于处理二进制数据,建议使用字节流进行处理。

综上所述,字节流和字符流在Java中各有其适用的场景和优势。

在实际编程过程中,根据数据类型和需求选择合适的流进行操作,可以提高代码的效率和可读性。

java输出数据类型的方法

java输出数据类型的方法

java输出数据类型的方法Java是一种面向对象的编程语言,它提供了多种方法来输出不同的数据类型。

在本文中,我们将通过一步一步的解释来介绍如何在Java中输出不同类型的数据。

在Java中,输出数据主要有两种方式:使用标准输出流和使用字符串拼接。

接下来,我们将详细介绍这两种方式以及如何使用它们来输出不同类型的数据。

一、使用标准输出流输出数据类型Java中提供了一个名为System的类,该类拥有一个静态成员变量out,该变量是一个PrintStream对象,它是一个表示输出流的对象。

我们可以使用这个对象来输出不同类型的数据。

下面是一些常见数据类型的输出示例:1. 输出字符串类型的数据在Java中,字符串类型的数据可以使用System.out.println()方法来输出。

例如:String message = "Hello, Java!";System.out.println(message);输出结果为:Hello, Java!2. 输出整数类型的数据整数类型的数据可以使用System.out.println()方法输出。

例如:int num = 10;System.out.println(num);输出结果为:103. 输出浮点数类型的数据浮点数类型的数据可以使用System.out.println()方法输出。

例如:double num = 3.14;System.out.println(num);输出结果为:3.144. 输出布尔类型的数据布尔类型的数据可以使用System.out.println()方法输出。

例如:boolean flag = true;System.out.println(flag);输出结果为:true5. 输出字符类型的数据字符类型的数据可以使用System.out.println()方法输出。

例如:char ch = 'A';System.out.println(ch);输出结果为:A二、使用字符串拼接输出数据类型除了使用标准输出流外,我们还可以使用字符串拼接的方式来输出不同类型的数据。

Java 输入输出 的 基本原理及示例

Java 输入输出 的 基本原理及示例

来自:亿淘城_减肥榜的个人笔记谢谢你的支持(*^__^*) 嘻嘻……Java I/O原理→基本概念:•I/O(Input/Output)•数据源(Data Source)•数据宿(Data Sink)→Java中把不同的数据源与程序间的数据传输都抽象表述为“流”(Stream),java.io包中定义了多种I/O流类型实现数据I/O功能。

→I/O流分类:•输入流(Input Stream)和输出流(Output Stream)•节点流(Node Stream)和处理流(Processing Stream)•字符流(Character Stream)和字节流(Byte Stream)#输入流(Input Stream)和输出流(Output Stream)1.输入流只能从中读取数据,而不能向其写数据;2.输出流则只能向其写出数据,而不能从中读取数据;3.特例:java.io.RandomAccessFile类。

#节点流(Node Stream)和处理流(Processing Stream)1.节点流直接连接到数据源2.处理流是对一个已存在的流的连接和封装,通过所封装的刘的功能调用实现增强的数据读写功能,处理流并不直接连到数据源#字符流(Character Stream)和字节流(Byte Stream)1.字节流以字节为单位进行数据传输,每次传送一个或多个字节。

2.字符流以字符为单位进行数据传输,每次传送一个或多个字符。

※Java命名惯例:凡是以InputStream 或OutputStream结尾的类型均为字节流,凡是以Reader 或Writer 结尾的均为字符流。

InputStream抽象类java.io.InputStream 是所有字节输入流类型的父类,该类中定义了以字节为单位读取数据的基本方法,并在其子类中进行了分化和实现。

◆三个基本的 read方法:Int read()Int read(byte[] buffer)Int read(byte[] buffer,int offset,int length)◆其它方法:Void close()Int available()Skip(long n)Boolean markSupported()Void mark(int readlimit)Void reset()OnputStreamJava.io.OutputStream 与java.io.InputStream对应,是所有字节输出流类型的抽象父类。

Java自学第10期——File类与IO流(输入输出流、处理流、转换流、缓冲流、Prope。。。

Java自学第10期——File类与IO流(输入输出流、处理流、转换流、缓冲流、Prope。。。

Java⾃学第10期——File类与IO流(输⼊输出流、处理流、转换流、缓冲流、Prope。

1、IO简介IO(输⼊输出)通过java.io包下的类和接⼝来⽀持,包下包括输⼊、输出两种IO流,每种输⼊输出流⼜可分为字符流和字节流两⼤类。

2、File类File类是io包下与平台⽆关的⽂件和⽬录,File能新建、删除、重命名⽂件和⽬录,不能访问⽂件本⾝,后者需要使⽤输⼊输⼊流。

2.1 构造⽅法File类的构造⽅法:File(File parent, String child) 参数:⽗路径,⼦路径根据 parent 抽象路径名和 child 路径名字符串创建⼀个新 File 实例。

File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建⼀个新 File 实例。

File(String parent, String child)根据 parent 路径名字符串和 child 路径名字符串创建⼀个新 File 实例。

File(URI uri)通过将给定的 file: URI 转换为⼀个抽象路径名来创建⼀个新的 File 实例。

2.2 静态⽅法File类静态⽅法:static String pathSeparator()与系统有关的路径分隔符,为了⽅便,它被表⽰为⼀个字符串。

static char pathSeparatorChar()与系统有关的路径分隔符。

static String separator()与系统有关的默认名称分隔符,为了⽅便,它被表⽰为⼀个字符串。

static char separatorChar()与系统有关的默认名称分隔符。

2.3 常⽤⽅法:2.3.1 获取相关public String getAbsolutePath()返回此File的绝对路径名字符串。

public String getPath()将此File转换为路径名字符串。

public String getName()返回由此File表⽰的⽂件或⽬录的名称。

[java入门学习]第 9 章 Java输入输出操作

[java入门学习]第 9 章 Java输入输出操作

第九章 Java输入输出操作9.1 Java 输入输出流所有的程序语言都提及与本机文件系统交互的方式;Java也不例外。

我们将看看Java 是怎样处理标准文件输入输出的(包括stdin,stout,stderr)。

当你在网络上开发小程序时,你必须注意直接文件输入输出是不安全因素的关键。

大多数用户设置他们的浏览器,可让你自由的访问他们的文件系统,但有的不让你访问。

当然,如果你开发你内部的应用程序,你也许需要直接访问文件。

标准输入输出Unix的用户,或其他基于命令行系统的用户(如DOS),都知道标准输入输出的含义。

标准输入文件是键盘,标准输出文件是你的终端屏幕。

标准错误输出文件也指向屏幕,如果有必要,它也可以指向另一个文件以便和正常输出区分。

系统类Java通过系统类达到访问标准输入输出的功能。

上面提到的三个文件在这个系统类中实现:Stdin System.in作为InputStream类的一个实例来实现stdin,你可以使用read()和skip(long n)两个成员函数。

read()让你从输入中读一个字节,skip(long n)让你在输入中跳过n个字节。

Stout System.out作为PrintStream来实现stdout,你可以使用print()和println()两个成员函数。

这两个函数支持Java的任意基本类型作为参数。

Stderr System.err同stdout一样实现stderr。

象System.out一样,你可以访问PrintStream 成员函数。

9.2 标准输入输出例子import java.io.* class myCat{public void main(String args[]) throws IOException{int b;int count = 0;while ((b = System.in.read()) != -1){count++;System.out.print((char)b);}System.out.println(); //blank line System.err.println("counted"+count+"total bytes.");}}9.3 普通输入输出类除了基本的键盘输入和屏幕输出外,我们还需要联系文件的输入输出。

java 标准输入输出流

java  标准输入输出流

java 标准输入输出流
计算机系统都有标准的输入设备和标准输出设备。

对一般系统而言,标准输入设备通常是键盘,而标准输出设备是屏幕。

Java程序经常需要从键盘上输入数据,从屏幕上输出数据,为此频繁创建输入/输出流对象将很不方便。

因此,Java语言事先定义好了两个对象,分别对系统的标准输入和标准输出相联系,如System.in和System.out,另外还定义了标准的System.err错误输出流。

System.in是标准输入流,是InputStream类的实例。

可以使用read()方法从键盘上读取字节,也可以将它包装成数据流读取各种类型的数据和字符串。

在使用System.in的read()方法时,由于read()方法在定义时抛出了IOException 异常,所以必须使用try-catch结构捕获异常或声明抛出异常;
System.out和System.err是标准输出流和标准错误输出流,是PrintStream类的实例。

如果从标准输入流键盘上输入基本数据类型,可以将标准输入流包装成具有缓
执行上述代码,结果如图12-12所示。

图12-12 System.in 标准输入流。

java 标准输出流

java 标准输出流

java 标准输出流Java 标准输出流。

Java 标准输出流是 Java 编程语言中的一个重要概念,它提供了一种将数据输出到控制台或其他输出目的地的机制。

在 Java 中,标准输出流通常被称为System.out,它是一个 PrintStream 类的实例。

通过标准输出流,开发人员可以将程序的输出信息发送到控制台,方便调试和查看程序运行状态。

本文将介绍 Java 标准输出流的基本概念、使用方法以及一些常见的应用场景。

1. 基本概念。

Java 标准输出流是 Java I/O 包中的一部分,它是一个输出流,用于向目的地输出数据。

标准输出流通常与 System.out 对象关联,开发人员可以通过System.out.println() 方法将数据输出到标准输出流。

标准输出流是一个字节流,它可以输出字节数据或字符数据。

在 Java 中,标准输出流是一个已经预定义好的输出流,开发人员无需创建新的输出流对象,只需直接使用即可。

2. 使用方法。

使用 Java 标准输出流非常简单,开发人员可以直接通过 System.out 对象调用println() 方法将数据输出到控制台。

例如:```java。

System.out.println("Hello, world!");```。

上述代码将字符串 "Hello, world!" 输出到标准输出流,然后在控制台上显示出来。

除了 println() 方法之外,System.out 对象还提供了其他一些输出方法,如print()、printf() 等,开发人员可以根据需要选择合适的输出方法。

3. 应用场景。

Java 标准输出流在开发中有着广泛的应用场景,它可以用于调试程序、输出程序执行结果、记录程序运行日志等。

在调试程序时,开发人员可以通过标准输出流输出变量的值、方法的执行结果等信息,帮助定位程序中的问题。

在程序执行结果输出时,标准输出流可以将程序的运行结果输出到控制台,方便用户查看。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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。

实际上是通过byte[]和String来关联。

在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的。

以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。

两个对应类实现的功能相同,只是在操作时的导向不同。

如 CharArrayReader和ByteArrayInputStream的作用都是把内存中的一个缓冲区作为InputStream使用,所不同的是前者每次从内存中读取一个字节的信息,而后者每次从内存中读取一个字符。

字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串;而字节流处理单元为1个字节,操作字节和字节数组,可用于任何类型的对象,包括二进制对象,但是不能直接处理Unicode字符。

字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好。

如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点。

2流的层次结构java将读取数据对象称为输入流,能向其写入的对象叫输出流。

1)基于字节的输入流●FileInputStream:把一个文件作为InputStream,从本地文件系统中读取数据字节,实现对文件的读取操作●ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用,从内存数组中读取数据字节●ObjectInputStream:对象输入流。

从文件中把对象读出来重新建立。

对象必须要实现Serializable接口。

对象中的transient和static类型的成员变量不会被读取和写入。

●PipedInputStream:实现了pipe的概念,从线程管道中读取数据字节,主要在线程中使用。

管道输入流是指一个通讯管道的接收端。

一个线程通过管道输出流发送数据,而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯●SequenceInputStream:把多个InputStream合并为一个InputStream,当到达流的末尾时从一个流转到另一个流,“序列输入流”类允许应用程序把几个输入流连续地合并起来,并且使它们像单个输入流一样出现。

●StringBufferInputStream:把一个String对象作为InputStream,从字符串中读取数据字节●FilterInputStream:过滤器流java.io.FilterInputStream,过滤器流即能把基本流包裹起来,提供更多方便的用法。

类的构造方法为FilterInputStream(InputStream),在指定的输入流之上,创建一个输入流过滤器。

常用的子类如下:◆BufferedInputStream:缓冲区对数据的访问,以提高效率◆DataInputStream:从输入流中读取基本数据类型,如int、float、double或者甚至一行文本◆LineNumberInputStream:在翻译行结束符的基础上,维护一个计数器,该计数器表明正在读取的是哪一行。

◆PushbackInputStream:允许把数据字节向后推到流的首部●System.in从用户控制台读取数据字节在System类中, in是InputStream类的静态对象,因此,out和err 可以引用PrintStream类的成员方法。

如:System.in.read()。

2)基于字节的输出流●FileOutputStream:把信息存入文件中●ByteArrayOutputStream:把信息存入内存中的一个缓冲区中,该类实现一个以字节数组形式写入数据的输出流●PipedOutputStream:实现了pipe的概念,主要在线程中使用。

管道输出流是指一个通讯管道的发送端。

一个线程通过管道输出流发送数据,而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯。

●SequenceOutputStream:把多个OutStream合并为一个OutStream●FilterOutputStream:类似于FilterInputStream,OutputStream也提供了过滤器输出流。

●ObjectOutputStream:对象输出流。

对象必须要实现Serializable接口。

对象中的transient和static类型的成员变量不会被读取和写入。

●System.out输出数据字节到用户控制台在System类中,out和err是PrintStream类的静态对象,因此,out 和err可以引用PrintStream类的成员方法。

如:System.out.write (inta)。

3)基于字符的输入流●CharArrayReader:与ByteArrayInputStream对应,从字符数组中读取数据●StringReader:与StringBufferInputStream对应,从字符数组中读取数据●FileReader:与FileInputStream对应,从本地文件系统中读取字符序列●PipedReader:与PipedInputStream对应,从线程管道中读取字符序列●InputStreamReader:InputStreamReader是从输入流中读取数据,连接输入流于读取器。

如: new InputStreamReader(System.in)●BufferedReader:缓冲数据的访问,以提高效率◆LineNumberReader(BufferedReader的子类):维护一个计数器,该计数器表明正在读取的是哪一行。

●FilterReader(抽象类):提供一个类创建过滤器时可以扩展这个类◆PushbackReader(FilterReader的子类):允许把文本数据推回到读取器的流中。

这些过滤器读取器都可以传入一个Reader作为构造方法的参数。

4)基于字符的输出流●CharArrayWrite:与ByteArrayOutputStream对应●StringWrite:无与之对应的以字节为导向的stream●FileWrite:与FileOutputStream对应PipedWrite:与PipedOutputStream对应3InputStream类Inputstream类和Outputstream类都为抽象类,不能创建对象,可以通过子类来实例化。

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

Reader也有完全相同的3个read接口。

Inputstream类中的常用方法:1)public abstract int read( ):读取一个byte的数据,返回读到的数据(高位补0的int类型值),如果返回-1,表示读到了输入流的末尾。

2)public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。

返回值是读取的字节数, 如果返回-1,表示读到了输入流的末尾。

该方法实际上是调用下一个方法实现的。

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

如果返回-1,表示读到了输入流的末尾。

off指定在数组b中存放数据的起始偏移位置。

4)public int available( ):返回输入流中可以读取的字节数。

注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用。

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

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

7)void mark(int readlimit) :在输入流的当前位置放置一个标记,如果读取的字节数多于readlimit设置的值,则流忽略这个标记。

在IutputStream类中实际是一个空实现。

8)void reset() :返回到上一个标记。

9)boolean markSupported() :测试当前流是否支持mark和reset方法。

如果支持,返回true,否则返回false。

在IutputStream类中实际是一个空实现。

4OutputSteam类OutputStream提供了3个write方法来做数据的输出,这个是和InputStream是相对应的,Writer同样提供了相同的三个write方法。

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

相关文档
最新文档