输入流和输出流的概念(JAVA的输入输出流是指的什么啊)
本文目录
- JAVA的输入输出流是指的什么啊
- java怎么区分输入流和输出流
- 简述什么叫流,流式输入输出有什么特点
- 流概述与字节流输入输出
- 如何理解输入流与输出流概念
- 输入,输出流的作用是分别什么
- 简述java中流的概念和划分
- C++ 输入输出流是什么意思
- 如何形象的理解计算机中“流”的概念
JAVA的输入输出流是指的什么啊
Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家做一个简要的介绍。 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样,如下图: Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的: 在这其中InputStream和OutputStream在早期的Java版本中就已经存在了,它们是基于字节流的,而基于字符流的Reader和Writer是后来加入作为补充的。以上的层次图是Java类库中的一个基本的层次体系。 在这四个抽象类中,InputStream和Reader定义了完全相同的接口:int read()int read(char cbuf)int read(char cbuf, int offset, int length) 而OutputStream和Writer也是如此:int write(int c)int write(char cbuf)int write(char cbuf, int offset, int length) 这六个方法都是最基本的,read()和write()通过方法的重载来读写一个字节,或者一个字节数组。 更多灵活多变的功能是由它们的子类来扩充完成的。知道了Java输入输出的基本层次结构以后,本文在这里想给大家一些以后可以反复应用例子,对于所有子类的细节及其功能并不详细讨论。import java.io.*; public class IOStreamDemo { public void samples() throws IOException { //1. 这是从键盘读入一行数据,返回的是一个字符串 BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in)); System.out.print("Enter a line:"); System.out.println(stdin.readLine()); //2. 这是从文件中逐行读入数据 BufferedReader in = new BufferedReader(new FileReader("IOStreamDemo.java")); String s, s2 = new String(); while((s = in.readLine())!= null) s2 += s + "\n"; in.close(); //3. 这是从一个字符串中逐个读入字节 StringReader in1 = new StringReader(s2); int c; while((c = in1.read()) != -1) System.out.print((char)c); //4. 这是将一个字符串写入文件 try { BufferedReader in2 = new BufferedReader(new StringReader(s2)); PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IODemo.out"))); int lineCount = 1; while((s = in2.readLine()) != null ) out1.println(lineCount++ + ": " + s); out1.close(); } catch(EOFException e) { System.err.println("End of stream"); } } } 对于上面的例子,需要说明的有以下几点: 1. BufferedReader是Reader的一个子类,它具有缓冲的作用,避免了频繁的从物理设备中读取信息。它有以下两个构造函数:BufferedReader(Reader in)BufferedReader(Reader in, int sz) 这里的sz是指定缓冲区的大小。 它的基本方法:void close() //关闭流 void mark(int readAheadLimit) //标记当前位置 boolean markSupported() //是否支持标记 int read() //继承自Reader的基本方法 int read(char cbuf, int off, int len) //继承自Reader的基本方法 String readLine() //读取一行内容并以字符串形式返回 boolean ready() //判断流是否已经做好读入的准备 void reset() //重设到最近的一个标记 long skip(long n) //跳过指定个数的字符读取 2. InputStreamReader是InputStream和Reader之间的桥梁,由于System.in是字节流,需要用它来包装之后变为字符流供给 BufferedReader使用。 3. PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IODemo.out"))); 这句话体现了Java输入输出系统的一个特点,为了达到某个目的,需要包装好几层。首先,输出目的地是文件IODemo.out,所以最内层包装的是FileWriter,建立一个输出文件流,接下来,我们希望这个流是缓冲的,所以用BufferedWriter来包装它以达到目的,最后,我们需要格式化输出结果,于是将PrintWriter包在最外层。 Java提供了这样一个功能,将标准的输入输出流转向,也就是说,我们可以将某个其他的流设为标准输入或输出流,看下面这个例子:import java.io.*;public class Redirecting { public static void main(String args) throws IOException { PrintStream console = System.out; BufferedInputStream in = new BufferedInputStream( new FileInputStream( "Redirecting.java")); PrintStream out = new PrintStream( new BufferedOutputStream( new FileOutputStream("test.out"))); System.setIn(in); System.setOut(out); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String s; while((s = br.readLine()) != null) System.out.println(s); out.close(); System.setOut(console); }} 在这里java.lang.System的静态方法static void setIn(InputStream in)static void setOut(PrintStream out) 提供了重新定义标准输入输出流的方法,这样做是很方便的,比如一个程序的结果有很多,有时候甚至要翻页显示,这样不便于观看结果,这是你就可以将标准输出流定义为一个文件流,程序运行完之后打开相应的文件观看结果,就直观了许多。 Java流有着另一个重要的用途,那就是利用对象流对对象进行序列化。下面将开始介绍这方面的问题。 在一个程序运行的时候,其中的变量数据是保存在内存中的,一旦程序结束这些数据将不会被保存,一种解决的办法是将数据写入文件,而Java中提供了一种机制,它可以将程序中的对象写入文件,之后再从文件中把对象读出来重新建立。这就是所谓的对象序列化Java中引入它主要是为了RMI(Remote Method Invocation)和Java Bean所用,不过在平时应用中,它也是很有用的一种技术。 所有需要实现对象序列化的对象必须首先实现Serializable接口。下面看一个例子:import java.io.*;import java.util.*;public class Logon implements Serializable { private Date date = new Date(); private String username; private transient String password;Logon(String name, String pwd) { username = name; password = pwd; }public String toString() { String pwd = (password == null) ? "(n/a)" : password; return "logon info: \n " + "username: " + username + "\n date: " + date + "\n password: " + pwd; }public static void main(String args) throws IOException, ClassNotFoundException { Logon a = new Logon("Morgan", "morgan83"); System.out.println( "logon a = " + a); ObjectOutputStream o = new ObjectOutputStream( new FileOutputStream("Logon.out")); o.writeObject(a); o.close(); int seconds = 5; long t = System.currentTimeMillis() + seconds * 1000; while(System.currentTimeMillis() 《 t) ; ObjectInputStream in = new ObjectInputStream( new FileInputStream("Logon.out")); System.out.println( "Recovering object at " + new Date()); a = (Logon)in.readObject(); System.out.println("logon a = " + a); }} 类Logon是一个记录登录信息的类,包括用户名和密码。首先它实现了接口Serializable,这就标志着它可以被序列化。之后再main方法里ObjectOutputStream o = new ObjectOutputStream( new FileOutputStream("Logon.out"));新建一个对象输出流包装一个文件流,表示对象序列化的目的地是文件Logon.out。然后用方法writeObject开始写入。想要还原的时候也很简单ObjectInputStream in = new ObjectInputStream( new FileInputStream("Logon.out"));新建一个对象输入流以文件流Logon.out为参数,之后调用readObject方法就可以了。 需要说明一点,对象序列化有一个神奇之处就是,它建立了一张对象网,将当前要序列化的对象中所持有的引用指向的对象都包含起来一起写入到文件,更为奇妙的是,如果你一次序列化了好几个对象,它们中相同的内容将会被共享写入。这的确是一个非常好的机制。它可以用来实现深层拷贝。 关键字transient在这里表示当前内容将不被序列化,比如例子中的密码,需要保密,所以没有被写入文件。 对Java的输入输出功能,就浅浅的介绍到这里,本文的目的只是开一个好头,希望能让大家对Java输入输出流有个基本的认识。
java怎么区分输入流和输出流
outputstream字节输出流:是为了把内存里的东西转到文件,是把内容输出出去写出去。inputstream字节输入流:文件上的内容转到内存,是读reader字符输入流writer字符输出流
简述什么叫流,流式输入输出有什么特点
流是指同一台计算机或网络中不同计算机之间有序运动的数据序列,Java语言把这些不同来源和目标的数据都统一称为数据流。数据流可分为输入流输出流,输入流代表从其他设备流入计算机的数据序列,输出流代表从计算机流向外部设备的数据序列流式输入输出的特点是数据的获取和发送沿数据序列的顺利进行,即每一个数据都必须等待排在它前面的数据,等前面的数据读入或送出之后才能被读写。所以流和队列一样,只能以“先进先出”的方式对其中的数据进行读写,而不能随意选择读写的位置。
流概述与字节流输入输出
File类可以对文件或目录的属性进行操作,但是File类不能访问文件的内容,即不能从文件中读取数据或者往文件里写数据。
读文件是指把文件中的数据读取到内存中。反之,写文件是把内存中的数据写到文件中。读写文件的工具是流。
流是指一连串流动的字符,是以先进先出的方式发送和接受数据的通道。 流分为输入流和输出流 。如果数据输入到内存,则称为输入流,如果从内存中输出则称为输出流。 java中的输出流主要由OutputStream和Write作为基类,而输入流则主要由InputStream和Reader作为基类。
在java.io包中,封装了许多输入、输出流的API。在程序中,这些输入、输出流类的对象称为流对象。可以通过这些流对象将内存中的数据以流的方式写入文件,也可以通过流对象将文件中的数据以流的方式读取到内存。
构造流对象往往会和数据源(文件)联系起来。 数据源分为源数据源和目标数据源。 输入流关联的是源数据源,输出流关联的是目标数据源。
输入\输出流又分为 字节流和字符流 两种形式。
字节流是8位通用字节流, 其基本单位是字节。字节流的基类是InputStream类和OutputStream类它们是抽象类。
字符流是16位Unicode字符流,基本单位是Unicode字符。 字符流最适合用来处理字符串和文本,因为它们支持国际上大多数的字符集和语言。字符流的基类是Reader类和Writer类,它们也是抽象类。
InputStream是一个抽象类,里面定义了字节输入流常用的方法。因为抽象类不能实例化,所以在实际中我们通常使用的都是它的子类FileInputStream类。
int read():从输入流中读取下一个字节数据;将数据源中的数据以一个字节一个字节的形式读入进来, 而且读进来之后会把这些字节对应的整数形式返回给你。 如果到了输入流的末尾,则返回-1。
int read (byte b):从输入流中读取数据,并将数据存储在缓冲区数组b中,返回实际读取的字节数( 注:这个方法在读的时候也是将读进来的字节以对应整数形式存储在数组中,当从数组中读取时,需要进行强制装换(char) )。如果到了输入流的末尾,则返回-1。
OuputStream是一个抽象类,里面定义了字节输出流常用的方法。因为抽象类不能实例化,所以在实际中我们通常使用的都是它的子类FileOuputStream类。
实例:
如何理解输入流与输出流概念
东西读入内存就是输入流东西从内存写到记录存储输出流而我们本身就以记录存储为原点所有会有不解的感觉~ java io流按照java io流的方向可以分为输入流和输出流输入流是将资源数据读入到缓冲Buffer中,输出流是将缓冲Buffer中的数据按照指定格式写出到一个指定的位置,所以这两个流一般同时使用,才有意义。例如你要做文件的上传,你要先用输入流将待上传文件读入缓冲,然后用输出流将文件写出到网络服务器的一个位置,则上传成功;若是文件下载,则先获得输入流,来读取网络服务器中的一个文件,然后用输出流写到本地的一个文件中;还有例如文件的拷贝,也是先用输入流读再用输出流写出去的很好的例子,你可以先做一个小例子试试,对你理解java io有帮助
输入,输出流的作用是分别什么
简单的说 输入流 就是把文件读到内存。 输出流 就是把内存中存储流的生成文件。 例如:修改一图片 需要通过输入流把图片读到内存,相应的软件对图片进行处理。 处理完以后。修改好的“图片”仅仅是在内存中。需要用输出流进行保存。生成新修改的图 片。
简述java中流的概念和划分
流的概念:流分为字节流、字符流(数据类型);输入流、输出流(数据方向);节点流、处理流(数据功能)。三种分类是根据不同的概念来划分的;流有四个抽象类:InputStream 、OutputStream、Reader、Writer;其中前两个是字节流处理时候是通过输入或输出字节形式的;后面两个是通过字符来处理的读取或写入每个字符;在java中输入输出写入读取是从程序的方向上去辨别的,这一点不要搞混了。什么是节点流?简单的例子:比如说从某个文件中读取数据把这个文件当做一个大桶,现在用个管道直接连接在这个大桶上进行抽水此时这跟管道就是节点流;当感觉这个管道不够抽水用的了,在其外面套上一个大的抽水管道,此时这个大的管道就相当于处理流;
C++ 输入输出流是什么意思
可以把流看作是一种数据的载体,通过它可以实现数据交换和传输。就像水流是一串水组成的 计算机中的数据流就是由一串数据组成的东西。
如何形象的理解计算机中“流”的概念
一、概念Java中对文件的操作是以流的方式进行的。流是Java内存中的一组有序数据序列。Java将数据从源(文件、内存、键盘、网络)读入到内存中,形成了流,然后将这些流还可以写到另外的目的地(文件、内存、控制台、网络),之所以称为流,是因为这个数据序列在不同时刻所操作的是源的不同部分。二、分类流的分类,Java的流分类比较丰富,刚接触的人看了后会感觉很晕。流分类的方式很多:1、按照输入的方向分,输入流和输出流,输入输出的参照对象是Java程序。2、按照处理数据的单位不同分,字节流和字符流,字节流读取的最小单位是一个字节(1byte=8bit),而字符流一次可以读取一个字符(1char = 2byte = 16bit)。3、按照功能的不同分,分节点流和处理流,节点流是直接从一个源读写数据的流(这个流没有经过包装和修饰),处理流是在对节点流封装的基础上的一种流,FileInputStream是一个接点流,可以直接从文件读取数据,但是BufferedInputStream可以包装 FileInputStream,使得其有缓冲功能。其实除了以上三种分类外,还有一些常常听到的一些分类比如:对象流、缓冲流、压缩流、文件流等等。其实都是节点流和处理流的子分类。当然你也可以创建新的流类型,只要你需要。三、流分类的关系不管流的分类是多么的丰富和复杂,其根源来自于四个基本的类。这个四个类的关系如下:字节流 字符流输入流 InputStream Reader输出流 OutputStream Writer《!-- EndFragment--》四、字节流和字符流的相互转换1、从字节流到字符流:InputStreamReader、OutputStreamWriter类可以实现。2、从字符流到字节流:可以从字符流中获取char,然后就可以通过ByteArrayInputStream、ByteArrayOutputStream来实现到字节流的转换。
更多文章:
计算机是如何计算时间的?Excel中日期和时间也能计算哟,不信你看
2024年5月6日 08:10
plsql连接oracle怎么导出数据(PLSQL怎样导出oracle表结构和数据)
2024年7月23日 13:24
java调用python模型(机器学习中python训练出来的模型 java能加载吗)
2024年6月30日 13:06
五个页面的网页如何制作(求网页制作作业1、五个栏目,五个页面,首页名为index.html 2、首页要有班级、学号、姓名等)
2024年6月30日 22:46
indirect函数r1c1用法(Excel INDIRECT公式使用方法)
2024年7月2日 22:36
《java入门到精通》介绍(《head first Java》和《Java从入门到精通》第三版怎么样)
2024年7月9日 21:18
activated翻译(already activated your account 翻译下)
2023年8月22日 15:20
position的中文(be in a position to是什么意思)
2024年6月29日 05:03
excel表格制作档案管理步骤(excel表格上怎么弄档案盒标签)
2024年7月2日 17:16
define(C语言中的#define是什么意思,有什么作用,怎样用)
2024年6月29日 22:40
数据库新增一万条数据(数据库要给表里所有物品的数量都增加10000个,这个sql要怎么写)
2024年6月16日 02:02
如何在阿里云服务器上搭建PHP环境?如何本地搭建PHP服务器环境
2024年6月27日 05:43
assisted(安乐死(Euthanasia)和协助自杀(Assisted suicide)有什么区别)
2024年4月30日 21:21
online update是什么意思(logic可以加载xln audio addictive keys吗)
2024年7月14日 03:09