这是今天在写画板保存时用到了输入输出流时,由于之前对这些模糊,而且在今后通信的那一块当中用得特别多,想要把这一节的内容弄的清楚,所以就去找了好多的资料,来深入理解。下面理解纯属个人看法,欢迎提异。
java输入输出流的功能十分的强大,但是java.io package包装了许多的不同的对象,涉及的范围也是很广的。它主要包括了有字节、字符、文件流这些。但是现在我们接触的比较多的是InoutStream(字节输入流)和OutputStream(字节输出流),以及其下的文件字节输入输出流FileInputStream和FileOutputStream。另外还有字符输入输出流Reader和Writer类。在此附图一张方便理解:
这里所说的字符流是指数据序列的基本构成单位是16位的Unicode字符数据,如各类基于字符编码的文本文件;字节流是指数据序列的基本构成单位是8位的字节数据,如各类基于二进制数据的文件。
其实说这些很不好让人理解,因为都是写固有的定义,我们可以根据自己的理解去认识它们。在我们理解某个包或者是类时,重要的是知道方法的运用。所以在这里简单介绍一下相关的方法:
Inputstream的方法:
从流中读取数据:
int read( ); //读取一个字节,返回值为所读的字节
int read( byte b[ ] ); //读取多个字节,放置到字节数组b中,通常读取的字节数量为b的长度,返回值为实际读取的字节的数量
int read( byte b[ ], int off, int len ); //读取len个字节,放置到以下标off开始字节数组b中,返
回值为实际读取的字节的数量
int available( ); //返回值为流中尚未读取的字节的数量
long skip( long n ); //读指针跳过n个字节不读,返回值为实际跳过的字节数量
关闭流: close( ); //流操作完毕后必须关闭
OutputStream的方法:
输出数据:
void write( int b ); //往流中写一个字节b
void write( byte b[ ] ); //往流中写一个字节数组b
void write( byte b[ ], int off, int len ); //把字节数组b中从下标off开始,长度为len的字节写入流中
flush( ) //刷空输出流,并输出所有被缓存的字节,由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。
关闭流: close( ); //流操作完毕后必须关闭
要熟练的掌握输入输出流中的方法,就必须熟悉这几个基本的方法。其实InputStream和OutputStream的方法中是相互对应的关系。所以记忆起来就比较方便。下面通过例子来加深印象。这个例子是用IO来实现文件的copy的:
public void copy(String sta,String end){ //传入源文件和复制到的文件路径 //例如:sta = "C:\\Users\\Administrator\\Desktop\\test.txt"; //例如:end = "C:\\Users\\Administrator\\Desktop\\test1.txt"; try { //输入输出流 InputStream ins = new FileInputStream(sta); OutputStream ous = new FileOutputStream(end); int aa = ins.read();//读取一个字节的数据 while(aa != -1){ ous.write(aa);//将读到的字节写入end文件 aa = ins.read(); } ins.close();//关闭输入流 ous.flush();//强制写出输出流中剩余数据 ous.close();//关闭输出流 } catch (Exception e) { e.printStackTrace(); } }
但是在这种情况下,文件的复制还是相当慢的,所以我们这是要用到BufferedInputStream(输入缓冲流)和BufferedOutputStream(输出缓冲流)。这里要注意的是他们的构造器就行了,就是分别传入InputStream和OutputStream。其他的用法与上面相似。
当然这是IO最简单的。还有稍微复杂的在后面一点。
例如在画板的保存问题上,我们要把n条直线先保存在某个文件里,然后在打开时将这些直线画出来。这里的话先参看代码:(这里只有菜单项的监听器类):
public void actionPerformed(ActionEvent e) { cmd = e.getActionCommand(); JFileChooser jf = new JFileChooser(); if("打开".equals(cmd)){ //打开选中的文件选择框的文件 jf.showOpenDialog(null); File file = jf.getSelectedFile(); try { InputStream ins = new FileInputStream(file);//文件输入流 DataInputStream dis = new DataInputStream(ins); byte len = dis.readByte();//读出直线条数 for(int i=0;i<len;i++){//读出直线的四个参量,并绘制直线 int x1 = dis.readInt(); int y1 = dis.readInt(); int x2 = dis.readInt(); int y2 = dis.readInt(); g.drawLine(x1, y1, x2, y2);//画线 } dis.close(); } catch (Exception e1) { e1.printStackTrace(); } }else if("保存".equals(cmd)){ jf.showSaveDialog(null); File file = jf.getSelectedFile();//文件选择框 try { OutputStream ous = new FileOutputStream(file);//文件输出流 DataOutputStream dos = new DataOutputStream(ous); dos.writeByte(Main.list.size());//写入直线的条数 for(int i = 0;i<Main.list.size();i++){ //从队列中循环取出直线对象赋给新创建的直线对象 //分别写入直线的四个参量 Line line = Main.list.get(i); dos.writeInt(line.x1); dos.writeInt(line.y1); dos.writeInt(line.x2); dos.writeInt(line.y2); } dos.flush();//强制输出 dos.close(); } catch (Exception e1) { e1.printStackTrace(); } } }
其实在这里的话呢是说,我们先写到文件里的数据就应该是先读出来,而且起哄的对应先后关系自己一定熟悉,否则必会出错,这里首先是写入直线的条数,然后将直线的四个点的参数写入,每画一条就多写入四个数据。同理,在读取的时候,也是这个先后关系。更要注意的是,对应输入输出的数据的类型也是要对应的。还有其他的图形、图片等等数据的都是要一样的对待。这里在后面的通信问题上也是,同样我们可以根据这个道理,可以很简便的对文件进行加密。所以加密的原理就在此,很简单。
这些都还只是写简单的,后面学习过程中有新的理解会及时更新。
相关推荐
java java输入输出 java输入流 java输出流 java java输入输出 java输入流 java输出流 java java输入输出 java输入流 java输出流
Java输入输出流是Java编程中一个非常重要的概念,主要用于数据的读取和写入操作,包括文本文件和二进制文件。在实验9中,主要目的是理解和掌握I/O流的分类,以及如何进行文本和二进制文件的读写。 I/O流在Java中被...
学习Java输入输出,需要理解流的概念,熟悉各类流的使用,并结合实际场景选择合适的流类型。同时,掌握文件操作、对象序列化、NIO等相关知识,能让你在处理数据交换时更加得心应手。在实践中不断尝试和调试,你会...
### Java输入输出流与文件处理 #### 重要概念与基础知识 **输入输出流与文件处理**在编程领域占据着核心地位,特别是在Java中,通过`java.io`包提供了丰富的类和接口来支持输入输出操作。这包括从键盘读取用户输入...
Java输入输出流是Java编程中不可或缺的部分,它用于应用程序与外部设备之间进行数据交换,比如磁盘、网络、键盘和显示器。I/O流是Java中处理输入和输出的基础框架,它提供了一种抽象的方式来处理不同类型的输入源和...
Java输入输出处理是Java编程中的一个关键领域,它涉及到程序与外部世界的数据交换,包括读取数据、写入数据以及管理内存和磁盘之间的数据流动。在Java中,输入输出通常通过流(Stream)的概念来实现,流是数据的双向...
java 输入输出流加密源码 里面详细介绍了加密流的代码,是文件的输入输出流,不过大同小异 其他io一样
Java输入输出流是Java编程语言中的核心概念,用于在程序之间、程序与系统资源之间传输数据。这个主题包括了从磁盘、网络、内存到控制台等不同源和目标的数据读写操作。在这个Java作业中,你将深入理解并实践这一关键...
Java输入输出流(IO流)是Java编程语言中处理数据传输的核心部分,它允许程序进行数据的读取和写入操作。在Java中,一切皆为流,输入流用于读取数据,而输出流用于写入数据。这些流可以处理各种类型的数据,包括文本...
Java中的输入输出流是程序与外部数据交互的重要方式,它允许我们读取和写入数据到各种来源,如键盘、文件、网络等。在Java中,输入输出流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。本次实验...
实验报告三:Java输入输出 本实验主要涵盖了Java中输入输出的基本操作,旨在让学生深入理解数据流的概念,熟悉Java流的层次结构,并掌握文件的读写操作。实验内容包括从键盘接收用户输入并在屏幕上显示,读取并显示...
Java输入输出流(I/O流)是Java编程中不可或缺的一部分,它主要用于程序与外部资源之间的数据传输。在Java中,I/O流的概念被用来抽象各种输入源和输出目标,包括键盘、显示器、文件、网络连接等。I/O流的设计遵循...
Java输入输出操作是Java编程中的基础且重要的一部分,它涵盖了数据的读取、写入以及文件和流的管理。在Java中,输入输出主要通过I/O流(Input/Output Stream)来实现,这些流用于在程序和外部资源之间传输数据。Java...
java输入输出流和文件操作.pdf
【Java输入输出流详解】 Java输入输出流(Input/Output Stream)是Java平台核心API的重要组成部分,主要用于处理数据的输入和输出。Java的I/O机制是基于流的,即数据以流的形式从一个地方传输到另一个地方。Java的I...
Java输入输出流是Java IO(Input/Output)体系的基础,它是Java处理数据传输的核心机制。在Java中,一切皆为对象,输入输出流也不例外。Java的输入输出流分为字节流和字符流两大类,每类又分别有输入流和输出流四种...
以下是两种常见的Java输入输出流的写法及其详细解释: 1. 字节流: - **FileInputStream** 和 **FileOutputStream**:这是处理文件输入输出的基本字节流类。`FileInputStream` 用于从文件读取字节,而 `...
Java 输入输出流练习 本练习旨在通过对 Java 输入输出流的实践掌握,提高学生对 Java 编程语言的理解和应用能力。通过这个实验,学生将学习如何使用 Java 语言进行文件输入输出操作,掌握 ObjectInputStream 和 ...
Java输入输出流(I/O流)是Java编程语言中用于处理数据输入和输出的重要机制。在Java中,I/O流允许程序与外部源(如键盘、显示器、文件、网络连接等)交换数据。本实例将深入讲解如何使用Java I/O流进行文件的读取和...
学习Java输入输出流时,不仅要掌握基本的流类型和方法,还要通过实践加深理解,比如编写读写文件、网络通信、处理标准输入输出的程序。同时,对象串行化的概念和使用方法也是重点,它可以帮助你更好地理解和应用Java...