广告
返回顶部
首页 > 资讯 > 精选 >Java的输入输出流的概念
  • 396
分享到

Java的输入输出流的概念

2023-06-17 12:06:25 396人浏览 安东尼
摘要

本篇内容主要讲解“Java的输入输出流的概念”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java的输入输出流的概念”吧!Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出

本篇内容主要讲解“Java的输入输出流的概念”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“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");                }           }     }

对于上面的例子,需要说明的有以下几点:

BufferedReader是Reader的一个子类,它具有缓冲的作用,避免了频繁的从物理设备中读取信息。它有以下两个构造函数:

  1. BufferedReader(Reader in) 

  2. 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) //跳过指定个数的字符读取

InputStreamReader是InputStream和Reader之间的桥梁,由于System.in是字节流,需要用它来包装之后变为字符流供给             BufferedReader使用。

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的输入输出流的概念”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Java的输入输出流的概念

本文链接: https://www.lsjlt.com/news/288870.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java的输入输出流的概念
    本篇内容主要讲解“Java的输入输出流的概念”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java的输入输出流的概念”吧!Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出...
    99+
    2023-06-17
  • JAVA输入输出流详解(H)
    */public String loadFileCon(String fileName,File file,String type){String fileContent = "",conTemp = "";byte[] fileConfB...
    99+
    2023-06-03
  • JAVA输入输出流详解(G)
    import java.util.*;import java.util.zip.*;import java.io.*;class ZipFileHandle{private String[] FileNameArray; ...
    99+
    2023-06-03
  • JAVA输入输出流详解(F)
    前两天看了《java核心编程》中对于java中的IO输入输出讲解,收获良多,下面的程序是我读完书以后自己写的一个将zip文件集中的文件内容读取出来然后显示(只限于文本,其他文件将会产生乱码),此程序也可通过改进可以得到一个和winzi...
    99+
    2023-06-03
  • Java输入输出流的区别是什么
    Java中的输入流和输出流是两个不同的概念,用于读取和写入数据。它们的区别在于方向和目的地。输入流是从数据源(如文件、网络连接等)读...
    99+
    2023-05-30
    Java输入输出流 Java
  • JAVA语言的输入输出流详解(c)
    详解b中的例子,详解[@more@]  1. BufferedReader是Reader的一个子类,它具有缓冲的作用,避免了频繁的从物理设备中读取信息。它有以下两个构造函数:BufferedReader(Reader in) Buffere...
    99+
    2023-06-03
  • Java实现带缓冲的输入输出流
    缓冲是 I/O 的一种性能优化。缓冲流为 I/O 流增加了内存缓冲区。 BufferedInputStream类 与 BufferedOutputStream类 BufferedIn...
    99+
    2022-11-13
  • JAVA语言输入输出流的示例代码
    这篇文章主要介绍了JAVA语言输入输出流的示例代码,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。public class IOStreamDemo {   &nbs...
    99+
    2023-06-03
  • C++的输入和输出流详解
    目录输入和输出流标准输入流小案例标准输出流文件读写总结输入和输出流 从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出,简称标准I/O。 从磁盘文件输入数据,数据输出到...
    99+
    2022-11-13
  • Java怎么实现带缓冲的输入输出流
    本篇内容主要讲解“Java怎么实现带缓冲的输入输出流”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么实现带缓冲的输入输出流”吧!缓冲是 I/O 的一种性能优化。缓冲流为 I/O 流增加...
    99+
    2023-06-29
  • Java中输入/输出流体系的示例分析
    这篇文章主要介绍Java中输入/输出流体系的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java输入/输出流体系1.字节流和字符流字节流:按字节读取。字符流:按字符读取。字符流读取方便,字节流功能强大,当不...
    99+
    2023-05-30
    java
  • java里的输入与输出
    一、概述 输入输出可以说是计算机的基本功能。作为一种语言体系,java中主要按照流(stream)的模式来实现。其中数据的流向是按照计算机的方向确定的,流入计算机的数据流叫做输入流(inputStream),由计算机发出的数据流叫做输出流(...
    99+
    2023-09-13
    java 开发语言
  • Java的简单输入输出
    作为一种常用的编程语言,Java提供了多种输入输出的方式,用于与用户进行数据交互或处理文件数据。下面将介绍简单易懂的Java输入输出方法。 使用Scanner类进行输入操作 Scanner类是Java中常用的输入方式之一,它可以方便地从标...
    99+
    2023-09-14
    java
  • Java中的输入和输出
    Java中的输入和输出是非常重要的,可以让程序与用户进行交互,读取和写入数据。下面是一些Java输入和输出的常用知识总结: 1. 标准输入输出(System.in和System.out): - 标准输入(System.in)是指从键盘或控制...
    99+
    2023-09-29
    javascript 开发语言 ecmascript
  • 图文详解Java中的字节输入与输出流
    目录字节输入流 字节输入流结构图FileInputStream类构造方法:常用读取方法:字节输出流 字节输出流结构图:FileOutputStream类构造方法:常用写入方法:总结字节输入流 java.io.InputStream抽象类是...
    99+
    2017-02-14
    java字节输入流和输出流 java文件输入输出字符流 java字节流
  • Java IO中字节输入输出流的示例分析
    这篇文章主要介绍Java IO中字节输入输出流的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!讲的是字节输入输出流:InputStream、OutputSteam(下图红色长方形框内),红色椭圆框内...
    99+
    2023-06-26
  • Java中的输入输出方式
    文章目录 前言一、输出到控制台二、从键盘输入 前言 学过C语言的都是知道,在C语言中,输入用scanf()函数,输出用printf。那么,Java中,输入输出的方式是怎样的呢?这篇文章,...
    99+
    2023-09-24
    java 开发语言
  • 如何解析C++中IO流的输入输出流
    本篇文章为大家展示了如何解析C++中IO流的输入输出流,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。介绍流: 若干字节数据从一端到另一端我们叫做流例如:操作文件,从程序到文件,数据的流动的操作称为流...
    99+
    2023-06-22
  • C++输入和输出流的示例分析
    这篇文章给大家分享的是有关C++输入和输出流的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。输入和输出流从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出,简称标准I/O。从磁盘文件输入数据...
    99+
    2023-06-29
  • Python 中的输入函数:概念和示例
    Python 是世界上最流行的编程语言之一,广泛应用于各种应用程序中。Python 中的一个基本概念是 ​​input()​​ 函数,它允许用户通过提供输入值与程序进行交互。让我们看看 ​​input()​​ 函数是如何工作的,以及如何在 ...
    99+
    2023-05-14
    Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作