JAVA 基础 IO操作

java.io操作是java基础中的基础,如果没有io操作程序都不会运行起来,所以,又回顾了一下java.io操作的内容,里面的对象序列化是J2EE的基础,是java中分布式部署和调用实现的基础,还有很有对文件系统、对网络资源的读写等等。

对于里面的个人觉的比较重要的知识做了一个图总结了一下。如下:

这里对于重点的理解和使用总结几点

1.概念理解

对于java.io的概念一直理解的有点偏差,首先这里面涉及到一个方向性的概念,即我们数据从哪里来到哪里去,在java.io操作中以及里面的很多概念和类的定义实现时,作者都是从内存的角度出发考虑的,比如你需要往电脑的硬盘上保存一些数据,那么你说是输入还是输出呢?其实这是输出操作,之所以你会觉的是输入操作因为你站在了自己的角度考虑,以为数据是自己写入到磁盘的,可实际上数据是通过内存往磁盘上写数据,对于内存来说这是输出操作

只有先正确理解了输入输出操作,才能正确选择何时的操作类来操作数据。

2.流操作

从一个文件写入另一个文件,如下

<pre name="code" class="java">	public static void main(String[] args) {  

        try
        {   //创建字节输入流
        	FileInputStream fis=new FileInputStream("F:\\歌曲\\Dreamcatcher.txt");
        	//创建字节输出流
        	FileOutputStream fos=new FileOutputStream("F:\\new.txt");

        	byte[] buf=new byte[64];
        	int hasRead=0;
        	//循环从输入流里面取数据
        	while ((hasRead=fis.read(buf))>0) {
				//每次读取一次,往文件输出流里面写多少
        		fos.write(buf,0,hasRead);
        		System.out.println(new String(buf,0,hasRead));
			}
        	System.out.println(new String(buf));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }  

3.对象序列化

所有可能在网络上传输的对象的类都应该是可序列化的,否则程序会出现异常,比如RMI远程方法调用,是JAVA EE的基础,过程中的参数和返回值;所有需要保存到磁盘里的对象类都必须可序列化,序列化底层实现是通过io流类来实现的。

序列化对象的版本号用途

有两个作用

其一,一个是反序列化多个对象时避免出现一个对象被序列化多多份

例如:

比如客户端有两个Teacher对象,引用同一个Student对象,在服务器端通过io反序列化时会接受到三个学生对象。

在序列化时对于引用类型的对象需要先序列化,这样在每次学历恶化Teacher对象时都会序列化Student对象,如果有了一个版本标识系统再实例化第二个Teacher对象时会先检测有没有Student对象,如果有将不再序列化。

其二,方便服务端升级,如果没有版本号每次编译类时系统都自动给类分配一个版本号,修改类结构之后前后两次会出现不一致现象,版本号避免。

总结;

对于IO操作顶层仅提供了几个抽象类,底层实现有十几个类通过装饰模式对底层一层一层封装,屏蔽底层数据处理的细节;IO操作为基础实现的对象序列化机制也是现在我们开发J2EE分布式应用的基础,它在整个java体系结构中处于底层,对于上面结构稳定很重要,经济基础决定上层建筑。

时间: 2024-10-10 14:46:10

JAVA 基础 IO操作的相关文章

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

黑马程序员——java基础---IO(input output)流字符流

黑马程序员——java基础---IO(input output)流字符流 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- io(input output)流特点: 1,io流用来处理数据之间的传输 2,java对数据的操作是通过流的方式: 3,java用于操作流的对象都在io包中: 4,流按操作数据分为两种:字节流和字符流: 5,流按流向分为:输入流和输出流. 注意:流只能操作数据,而不能操作文件. 3.IO流的常用基类: 1)字节流的抽象

黑马程序员——Java基础---io(上)

黑马程序员——Java基础---io(上) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java I/O系统负责处理程序的输入和输出,I/O类库位于java.io包中,它对各种常见的输入流和输出流进行了抽象.如果数据流中最小的数据单元是字节,那么称这种流为字节流:如果数据流

Java 基本IO操作

1.基本IO操作     有时候我们编写的程序除了自身会定义一些数据信息外,还需要引用外界的数据,或是将自身的数据发送到外界,这时我们需要使用输入与输出. 1)输入与输出       输入:是一个从外界进入到程序的方向,通常我们需要"读取"外界的数据时,使用输入.所以输入是用来读取数据的 输出:是一个从程序发送到外界的方向,通常我们需要"写出"数据到外界时,使用输出.所以输出是用来写出数据的 2)节点流与处理流 按照流是否直接与特定的地方(如磁盘.内存.设备等)相连

1.JAVA基础——IO

1.流的概念 一个对输入输出设备的抽象概念,JAVA中文件的操作都是以“流”的方式进行.可以把流理解成“管道”,数据通过管道得以从一端传输到另一端. 流具有方向性:一般而言这个方向是以程序作为参照,所以,输入流是指输向程序的流,输出流是指从程序输出的流:也可以理解成,程序从输入流获取数据,向输出流写数据. 流式输入输出的特点为:数据的获取和发送沿数据序列的顺序进行,即每一个数据都必须等待排在它前面的数据,等前面的数据读入或送出后才能被读写.因此,流和队列一样,只能以“先进先出”的方式对其中的数据

Java基础——iO(一)

此文为了解IO知识的基础篇,这块我看了几天,感觉和前段时间学习集合一样,零散又重要.想记录一下这块由浅入深的学习过程.所以,接下来会记录几篇学习笔记,之后会有以前深入总结.因为这块比较重要啊,所以一定要学好. 一.IO的概述 IO: (Input Output) --- 什么是流: 一组有顺序的.有起点和终点的数据集合,如文件流.网络流 --- 流与文件的区别: 文件是数据的静态存储方法.流是数据在传输时的一种形态. java 对数据的操作都是通过流的方式,java 用于操作流的对象都在IO包中

黑马程序员--Java基础--IO基本操作

基本IO操作 1. InputStream与OutputStream 1.1. 输入与输出 我们编写的程序除了自身会定义一些数据信息外,经常还会引用外界的数据,或是将自身的数据发送到外界.比如,我们编写的程序想读取一个文本文件,又或者我们想将程序中的某些数据写入到一个文件中.这时我们就要使用输入与输出. 什么是输入:输入是一个从外界进入到程序的方向,通常我们需要"读取"外界的数据时,使用输入.所以输入是用来读取数据的. 什么是输出:输出是一个从程序发送到外界的方向,通常我们需要&quo

Java基础IO流(一)

IO概念: 大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等.在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象表述为"流",程序允许通过流的方式与输入输出设备进行数据传输.Java中的"流"都位于java.io包中,成为IO(输入输出)流. IO分类: IO流有很多种,按照操作数据的不同,可以分为字节流和字符流,按照数据传输方向的不同又可以分为输入流和输出流,程序从输入流中读取

java的IO操作:字节流与字符流操作

流的概念 程序中的输入输出都是以流形式,流中保存的实际上都是字节文件. 字节流与字符流 字节流的操作: 1)输入:inputStream, 2)输出:outPutStream; 字符流的操作: 1)输入主要使用:write类. 2)输出主要使用:reader类. 内容操作就四个类. 操作流程: 使用File类操作一定有路径问题,注意分隔符: 实际上四个操作类都是抽象类(区别接口,抽象类的成员都是抽象,并且只能单继承,接口可以有全局变量,但是接口可以多继承) IO操作属于资源操作,对于资源操作,操