这是今天在写画板保存时用到了输入输出流时,由于之前对这些模糊,而且在今后通信的那一块当中用得特别多,想要把这一节的内容弄的清楚,所以就去找了好多的资料,来深入理解。下面理解纯属个人看法,欢迎提异。
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语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java输入输出流;进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、...
java输入输出处理 java输入输出处理 java输入输出处理 java输入输出处理 java输入输出处理 java输入输出处理
对java输入输出流与文件处理进行详细的阐述
关于java输入输出流的代码示例,可以通过这些示例学习
JAVa输入输出流 上课做的JAVa输入输出流程序,把一个文件中的东西读出写到另一个文件中
JAVA中,字节流和字符流的套用,提供IO输入输出的基本语法和步骤
java 输入输出流加密源码 里面详细介绍了加密流的代码,是文件的输入输出流,不过大同小异 其他io一样
只是输入输出的一个代码 我也是刚学java 有好多度不懂
java输入输出流和文件操作.pdf
实验三Java输入输出 (1)将键盘上输入的字符在屏幕上显示出来。 (2)将保存在本地机当前文件夹中的Ex3_2.HTML 文本文件的内容在屏幕上显示出来,然后将其另存为Ex3_2.txt 文件。 (3)保存对象信息到文件,并将文件中...
第十三章Java 输入输出流.rar第十三章Java 输入输出流.rar第十三章Java 输入输出流.rar
Java 输入输出大全
(1)先输入第一组操作数,并将其存放在一个文件中。 (2)然后输入第二组操作数,并将其存放在第二个文件中。 (3)选择一种加减乘除运算。 (4)从第一个文件中取第一个操作数,从第二个文件中取第二个操作数,将...
java输入输出流.ppt,详细介绍java的输入输出流,帮助你快速掌握java
Java输入输出流Java输入输出流
java输入输出流的简单例子
Java输入输出流.pdf
我们的第三次Java作业, 一个.java文件。一共有三个
java 输入输出流 I/O 实例 从文件读取信息,将处理过的信息写回文档。