`

JAVA输入输出

阅读更多

        这是今天在写画板保存时用到了输入输出流时,由于之前对这些模糊,而且在今后通信的那一块当中用得特别多,想要把这一节的内容弄的清楚,所以就去找了好多的资料,来深入理解。下面理解纯属个人看法,欢迎提异。

         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();
			}
		}
	}

       其实在这里的话呢是说,我们先写到文件里的数据就应该是先读出来,而且起哄的对应先后关系自己一定熟悉,否则必会出错,这里首先是写入直线的条数,然后将直线的四个点的参数写入,每画一条就多写入四个数据。同理,在读取的时候,也是这个先后关系。更要注意的是,对应输入输出的数据的类型也是要对应的。还有其他的图形、图片等等数据的都是要一样的对待。这里在后面的通信问题上也是,同样我们可以根据这个道理,可以很简便的对文件进行加密。所以加密的原理就在此,很简单。

       这些都还只是写简单的,后面学习过程中有新的理解会及时更新。

  • 大小: 104.5 KB
  • 大小: 128.8 KB
分享到:
评论

相关推荐

    Java输入输出 Java输入输出

    java java输入输出 java输入流 java输出流 java java输入输出 java输入流 java输出流 java java输入输出 java输入流 java输出流

    实验9 Java输入输出流.doc

    Java输入输出流是Java编程中一个非常重要的概念,主要用于数据的读取和写入操作,包括文本文件和二进制文件。在实验9中,主要目的是理解和掌握I/O流的分类,以及如何进行文本和二进制文件的读写。 I/O流在Java中被...

    java输入输出代码

    学习Java输入输出,需要理解流的概念,熟悉各类流的使用,并结合实际场景选择合适的流类型。同时,掌握文件操作、对象序列化、NIO等相关知识,能让你在处理数据交换时更加得心应手。在实践中不断尝试和调试,你会...

    java输入输出流与文件处理

    ### Java输入输出流与文件处理 #### 重要概念与基础知识 **输入输出流与文件处理**在编程领域占据着核心地位,特别是在Java中,通过`java.io`包提供了丰富的类和接口来支持输入输出操作。这包括从键盘读取用户输入...

    java输入输出流,电子课件

    Java输入输出流是Java编程中不可或缺的部分,它用于应用程序与外部设备之间进行数据交换,比如磁盘、网络、键盘和显示器。I/O流是Java中处理输入和输出的基础框架,它提供了一种抽象的方式来处理不同类型的输入源和...

    java输入输出处理

    Java输入输出处理是Java编程中的一个关键领域,它涉及到程序与外部世界的数据交换,包括读取数据、写入数据以及管理内存和磁盘之间的数据流动。在Java中,输入输出通常通过流(Stream)的概念来实现,流是数据的双向...

    java 输入输出流加密源码

    java 输入输出流加密源码 里面详细介绍了加密流的代码,是文件的输入输出流,不过大同小异 其他io一样

    Java 输入输出流 源码

    Java输入输出流是Java编程语言中的核心概念,用于在程序之间、程序与系统资源之间传输数据。这个主题包括了从磁盘、网络、内存到控制台等不同源和目标的数据读写操作。在这个Java作业中,你将深入理解并实践这一关键...

    JAVa输入输出流程序

    Java输入输出流(IO流)是Java编程语言中处理数据传输的核心部分,它允许程序进行数据的读取和写入操作。在Java中,一切皆为流,输入流用于读取数据,而输出流用于写入数据。这些流可以处理各种类型的数据,包括文本...

    JAVA输入输出流实验报告

    Java中的输入输出流是程序与外部数据交互的重要方式,它允许我们读取和写入数据到各种来源,如键盘、文件、网络等。在Java中,输入输出流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。本次实验...

    JAVA实验报告三java输入输出.docx

    实验报告三:Java输入输出 本实验主要涵盖了Java中输入输出的基本操作,旨在让学生深入理解数据流的概念,熟悉Java流的层次结构,并掌握文件的读写操作。实验内容包括从键盘接收用户输入并在屏幕上显示,读取并显示...

    java输入输出流.ppt

    Java输入输出流(I/O流)是Java编程中不可或缺的一部分,它主要用于程序与外部资源之间的数据传输。在Java中,I/O流的概念被用来抽象各种输入源和输出目标,包括键盘、显示器、文件、网络连接等。I/O流的设计遵循...

    java输入输出操作

    Java输入输出操作是Java编程中的基础且重要的一部分,它涵盖了数据的读取、写入以及文件和流的管理。在Java中,输入输出主要通过I/O流(Input/Output Stream)来实现,这些流用于在程序和外部资源之间传输数据。Java...

    java输入输出流和文件操作.pdf

    java输入输出流和文件操作.pdf

    java输入输出流 流式输入与输出

    【Java输入输出流详解】 Java输入输出流(Input/Output Stream)是Java平台核心API的重要组成部分,主要用于处理数据的输入和输出。Java的I/O机制是基于流的,即数据以流的形式从一个地方传输到另一个地方。Java的I...

    java输入输出流的简单例子

    Java输入输出流是Java IO(Input/Output)体系的基础,它是Java处理数据传输的核心机制。在Java中,一切皆为对象,输入输出流也不例外。Java的输入输出流分为字节流和字符流两大类,每类又分别有输入流和输出流四种...

    java输入输出流的两种写法

    以下是两种常见的Java输入输出流的写法及其详细解释: 1. 字节流: - **FileInputStream** 和 **FileOutputStream**:这是处理文件输入输出的基本字节流类。`FileInputStream` 用于从文件读取字节,而 `...

    Java输入输出练习

    Java 输入输出流练习 本练习旨在通过对 Java 输入输出流的实践掌握,提高学生对 Java 编程语言的理解和应用能力。通过这个实验,学生将学习如何使用 Java 语言进行文件输入输出操作,掌握 ObjectInputStream 和 ...

    java 输入输出流 实例

    Java输入输出流(I/O流)是Java编程语言中用于处理数据输入和输出的重要机制。在Java中,I/O流允许程序与外部源(如键盘、显示器、文件、网络连接等)交换数据。本实例将深入讲解如何使用Java I/O流进行文件的读取和...

    JAVA输入输出总括

    学习Java输入输出流时,不仅要掌握基本的流类型和方法,还要通过实践加深理解,比如编写读写文件、网络通信、处理标准输入输出的程序。同时,对象串行化的概念和使用方法也是重点,它可以帮助你更好地理解和应用Java...

Global site tag (gtag.js) - Google Analytics