A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天是IO体系的最后一天,请根据自己的理解回答以下问题:
1、序列化流中的serialVersionUID的作用
2、请根据自己的语言表述IO流的体系

20 个回复

倒序浏览
1、序列化流中的serialVersionUID的作用

答:如果一个类实现Serializale,可以被序列化,会在这个类中默认给出一个SerialVersionID是随机生成的,当执行序列化的时候,会将SerialVersionID序列化到文件中,当反序列化的时候,会将文件中的SerialVersionID和类中的SerialVersionID比对,如果反序列化之前修改了类的内容,那么类中的SerialVersionID被随机改变,两次的值不一样,会出现反序列化失败。

这种情况是JAVA的默认处理方式,因为会由于很多细节问题导致反序列化失败,可以直接指定一个SerialVersionID,当指定了SerialVersionID,在类被修改前后,值不会改变,不会出现反序列失败


2、请根据自己的语言表述IO流的体系
答:IO流就是用来处理设备间数据传输问题的,常用的应用:文件复制,文件上传,文件下载
其中I/O按数据的流向分为:输入流和输出流
       按数据类型分为:字节流和字符流   
                       字节流中分为字节输入流和字节输出流
                       字符流中分为字节输入流和字节输出流
      在字节流中 字节输入流有:FileInputStream 和 BufferedInputStream字节输入缓冲流
                 字节输出流有:FileOutputStream 和 BufferedOutputStream字节输出缓冲流
      在字符流中 字符输入流有:InputStreamReader 和 BufferedReader字符输入缓冲流                              字符输出流有:OutputStreamWriter 和 BufferedWriter字符输出缓冲流
字节流可以复制任意的文件数据,而字符流只能复制文本数据,但是字符流复制文本数据比字节流快

其中还有特色操作流:标准输入流和标准输出流  字节打印流和字符打印流  对象序列化流
回复 使用道具 举报
1、序列化流中的serialVersionUID的作用
        答:类会有一个serialVersionUID类属性,这是类序列化号,默认是计算机随机生成,当类代码改变之后类序列化号也会重新随机生成。对象系列化后类序列化号也会保存到文件中,在读取时如果类的序列号和对象保存的序列化号不同就会抛出异常。所以在对象系列化后,类就不能再改动。

解决方法:手动定义serialVersionUID类属性,并以static final long修饰,建议叫private修饰。赋值可以自定义。这样序列化号就不会发生给变,序列化对象后也能改类的内容了。


2、请根据自己的语言表述IO流的体系
        答:IO流分为者输入流和输出流。也可以分为字节流和字符流。
        1.字节流有字节输入流InputStream和字节输出流OutputStream,字节流可以包装成传输速度更快的字节缓冲输入流和字节缓冲输出流。
        2.字符流有字符输入流Reader和字符输出流Writer,字节流可以包装成传输速度更快的字符缓冲输入流和字符缓冲输出流。
        3.字节流有特殊输入流(标准输入流)Syste.in可以从控制台读取数据,还有特殊输出流(标准输出流)Syste.out能将数据打印到控制台。
        4.输出流中有两个便捷写入数据的打印流:字节打印流和字符打印流。
        5.能够快捷和IO读写数据的集合Properties。
回复 使用道具 举报 1 0
1.当一个类实现序列化接口时,系统默认给定一个序列化版本号serialVersionUID,当类序列化到文件时,
该版本号serialVersionUID会被一起保存于文件中。当反序列化时,Java会将文件中的serialVersionUID与
类中的serialVersionUID进行比较,若相同,反序列化成功。如果不同则说明该类被更改过,反序列化失败。

2.IO根据方向不同可分为输入流和输出流
根据数据不同可分为字节流和字符流
字节流:父类InputStream、OutPutStream,其直接子类,FileInputString、FileOutPutStream。
字节缓冲流增加缓冲区,提高读写效率BufferedInputStream、BufferedOutputStream
字符流:(底层字节流+编码集)父类Reader、Writer,其直接子类InputStreamReader、OutputStreamWriter,(使用平台默认编码集时可以用FileReader、FileWriter替换)。
字符缓冲流,增加缓冲区,提高读写效率BufferedReader、BufferedWriter(增加读、写一行的方法,需手动换行和刷新缓存)
标准输入输出流:System.in、System.out用于在控制台,读写数据,无需指定路径
打印流:PrintStream子类PrintWrite需指定路径,可在构造方法中设置自动刷新缓存,println()方法可自动换行,简洁代码。
序列化流:ObjectInPutStream、ObjectOutPutStream(InputStream、OutPutStream,的直接子类),用于对象的反序列化和序列化,对象序列化时需要实现Serializable接口
回复 使用道具 举报
1、序列化流中的serialVersionUID的作用

类实现Serializable接口可以被序列化,系统会默认给出一个随机生成的serialVersionUID。
当执行序列化的时候,会把serialVersionUID序列化到文件中。
在进行反序列化时,会将文件中的serialVersionUID与类的serialVersionUID相比较,如果
在反序列化之前,类有进行了修改,则类中的serialVersionUID被随机改变,比较的值就不一样,
会导致反序列化失败。
这时,通过自己指定一个serialVersionUID(private static final long),
在类的修改前后,serialVersionUID值不会被改变,就可以放心的进行序列化和反序列化了。2、请根据自己的语言表述IO流的体系

回复 使用道具 举报
1、序列化流中的serialVersionUID的作用

类实现Serializable接口可以被序列化,系统会默认给出一个随机生成的serialVersionUID。
当执行序列化的时候,会把serialVersionUID序列化到文件中。
在进行反序列化时,会将文件中的serialVersionUID与类的serialVersionUID相比较,如果
在反序列化之前,类有进行了修改,则类中的serialVersionUID被随机改变,比较的值就不一样,
会导致反序列化失败。
这时,通过自己指定一个serialVersionUID(private static final long),
在类的修改前后,serialVersionUID值不会被改变,就可以放心的进行序列化和反序列化了。

2、请根据自己的语言表述IO流的体系
回复 使用道具 举报
1、序列化流中的serialVersionUID的作用
        如果一个类实现Serializable接口,可以被序列化,会在这个类中默认给出一个serialVersionUID是随机生成的,当执行序列化的时候,会将serialVersionUID序列化到文件中,当反序列化的时候,会将文件中的seralVersionUID和类中的serialVersionUID,如果在反序列化之前修改了类的内容,那么类中的seralVersionUID被随机改变,比较两次的值不一致,会反序列化失败,这种情况是Java默认的处理方式,可以自己指定一个seralVersionUID,在类的修改前后,serialVersionUID值就不会被改变了


2、请根据自己的语言表述IO流的体系
        IO流分为输入流和输出流
        输入流:字节输入流、字符输入流
        输出流:字节输出流、字符输出流

        缓冲流(增加读写的效率):字节缓冲流、字符缓冲流

        特殊操作流分为标准流与打印流
        标准流:标准输入流、标准输出流
        打印流:字节打印流、字符打印流

回复 使用道具 举报

2019-06-26_184552.png (9.53 KB, 下载次数: 12)

2019-06-26_184552.png
回复 使用道具 举报 1 0
今天是IO体系的最后一天,请根据自己的理解回答以下问题:
1、序列化流中的serialVersionUID的作用
当执行序列化的时候,会将seriaversionuid序列化到文件中,当反序列化的时候,
会将文件中的

seriaversionuid和类中的seriaversionuid,进行比较,
如果在反序列化之前修改了类的内容,那么类中的seriaversionuid被随机改变,


比较俩次的值不一致,会反序列化失败


所以我们可以自己给定一个seriaversionuid
自己指定了seriaversionuid,在类的修改前后,值不会被改变,所以,放心的进行序列化和反序列化



private static final long serialVersionUID = 42L;
2、请根据自己的语言表述IO流的体系
io流分为输入流和输出流
输入流分为字节输入流,字符输入流,字节缓冲输入流,字符缓冲输入流,字节标准输入流,字符标准输入流

字节打印输入流,字符打印输入流
输出流分为字节输出流,字符输出流,字节缓冲输出流,字符缓冲输出流,字节标准输出流,字符标准输出流

字节打印输出流,字符打印输出流

回复 使用道具 举报
1、序列化流中的serialVersionUID的作用

类实现Serializable接口可以被序列化,系统会默认给出一个随机生成的serialVersionUID。
当执行序列化的时候,会把serialVersionUID序列化到文件中。
在进行反序列化时,会将文件中的serialVersionUID与类的serialVersionUID相比较,如果
在反序列化之前,类有进行了修改,则类中的serialVersionUID被随机改变,比较的值就不一样,
会导致反序列化失败。
这时,通过自己指定一个serialVersionUID(private static final long),
在类的修改前后,serialVersionUID值不会被改变,就可以放心的进行序列化和反序列化了。

回复 使用道具 举报
今天是IO体系的最后一天,请根据自己的理解回答以下问题:
1、序列化流中的serialVersionUID的作用
答:主动为该类设置一个serialVersionUID序列化号,减少异常发生的可能

2、请根据自己的语言表述IO流的体系

答:IO流常用的有 字节流和字符流,还有加强型的缓冲流,标准输入输出流,打印流,序列化流。以及字符流的便捷类。
字节流以字节数组的形式,降低了内存与硬盘的交互次数,提高了效率,字符流比字节流多了一个编码相关的阶段,比字节流
更适合再交互过程中具有显示打印等需求的场景,但是字符流不适合使用在非文本的文件的交互。
缓冲流,通过一个缓存的形式,加强了字节流字符流的效率。
标准输入输出了,是相对应于内存对控制台等的交互通道,而打印流,其具有一些相对特有的方法,主要的效用在于对代码简洁性。
序列化流,是对象与硬盘文件的交互,能够将对象快速写入文件也能 将文件中信息快速读出成为对象。
回复 使用道具 举报
今天是IO体系的最后一天,请根据自己的理解回答以下问题:
1、序列化流中的serialVersionUID的作用
当一个类实现了Serializable,可以被序列化,会在这个类中生成一个随机的serialVerisonUID,当序列化的时候.会将serialVerisonUID序列化到文档中,当反序列化时,会将文档中的serialVerisonUID和类中的serialVerisonUID进行比较,如果反序列化之前修改了类中的内容,类中的serialVerisonUID会在次随机生成,比较之后,两次序列化值不相同,会反序列化失败,因此随机生成的序列化值不安全,可以自己指定一个serialVersionUID,在类的内容修改之后,serialVersionUID不会改变

2、请根据自己的语言表述IO流的体系
(1)IO流概念
IO:是指Input和Output
流:是一种抽象概念,是对数据传输的总称,也就是说数据在设备之间传输就是流,流的本质就是数据传输
IO流是用来处理设备间的数据传输问题

(2)IO流分类
按照数据流向分为输入流(读数据)和输出流(写数据)   
按照数据类型分为字节流(字节输入流和字节输出流)和字符流(字符输入流和字符输出流)
为了提升数据传输效率,还提供了字节缓冲流和字符缓冲流
特殊操作流还分为标准流 对象序列化流 Properties

(3)IO流使用场景
如果操作的是纯文本,优先使用字符流
如果操作的是图片 音频 视频等二进制文件优先使用字节流
如果不确定文件类型,优先使用字节流,因为字节流是万能流
回复 使用道具 举报
1、序列化流中的serialVersionUID的作用
答:serialVersionUID是为了保证对象能够正常序列化和反序列化。如果序列化和反序列化的serialVersionUID值不一样,则会抛出InvalidClassException异常。

2、请根据自己的语言表述IO流的体系
答:IO流分为输入流和输出流。
    输入流分为字节输入流和字符输入流
    输出流分为字节输出流和字符输出流
    除此之外还有特殊的标准流和打印流:标准流为标准输入流(System.in)和标准输出流(System.out),打印流为字节打印流(PrintStream)和字符打印流(PrintWriter)。
    字节流(InputStream)以字节形式读取到内存中。一次可以读一个字节或者一个字节数组。再将读到的字节以字节的形式写到文件上。在字节流下还有一种字节缓冲流,能够创建一个缓冲区数组,一次读取一个数组,一次写出一个数组,这样就能够减少硬盘和内存的交互次数,提高效率。
    字符输入流(Reader)将文件中的字节查指定的编码集进行解码成字符。再将读到的字符以指定的编码表编码成字节,写入到文件中,因此文件中保存的还是字节。在字符输入流下还有一种字符缓冲流与字节缓冲流类似,同样能够提高读写效率。
回复 使用道具 举报
1、序列化流中的serialVersionUID的作用

通过添加serialVersionUID,可以防止因为修改序列化对象的类文件,反序列化时抛出InvalidClassException的异常问题
相当于给序列化对象添加了一个认证ID,防止因为修改而无法识别

2、请根据自己的语言表述IO流的体系

(1)IO主要分为字节流、字符流以及他们的增强流;
(2)字节流包括输出流InputStream,输出流OutputStream及其他们的子类,常用的是FileOutputStream和FileInputStream这两个子类;
(3)字符流包括输入流Reader和输出流Writer及其他们子类,常用的是FileReader和FileWriter两个子类
(4)增强流包括缓冲流(字符字节及其输入输出共四类),转换流(输入和输出两种)序列流(输入输出)和打印输出流(输出);
        a.缓冲流主要是用来提高读写效率的,其内部自带缓冲区,默认为8KB,可设置,对字符的读写提供了行读取和写入通用换行符;
        b.转换流主要是用来解决字符文件的编码问题,可以指定字符编码对字符文件进行读写,避免乱码问题;
        c.序列流主要是用来实现对象的序列化(将对象存储到文件中)和反序列化(从对象文件中直接读取对象信息,创建对象);
        d.打印输出流主要是用于将各种类型的数据以字符串形式输出到指定的目标例如控制台或某个文件。
回复 使用道具 举报
1、序列化流中的serialVersionUID的作用
        作用是定义一个类的时候会自动生成一个serialVersionUID,序列化到文件时候也有它,
        如果我们修改了类,在反序列化的时候会对比类和文件中的serialVersionUID如果版本对不上就会报出异常
        通常我们自己写private static final long serialVersionUID = 42L;这样就不会因为JDK版本问题
        序列化时序列号对不上的问题


2、请根据自己的语言表述IO流的体系

IO体系待完善.png (57.55 KB, 下载次数: 21)

IO体系待完善.png
回复 使用道具 举报
1、序列化流中的serialVersionUID的作用
        作用是定义一个类的时候会自动生成一个serialVersionUID,序列化到文件时候也有它,
        如果我们修改了类,在反序列化的时候会对比类和文件中的serialVersionUID如果版本对不上就会报出异常
        通常我们自己写private static final long serialVersionUID = 42L;这样就不会因为JDK版本问题
        序列化时序列号对不上的问题


2、请根据自己的语言表述IO流的体系

IO体系待完善.png (57.55 KB, 下载次数: 17)

IO体系待完善.png
回复 使用道具 举报
今天是IO体系的最后一天,请根据自己的理解回答以下问题:
1、序列化流中的serialVersionUID的作用
作用:给将被序列化的对象赋值一个序列化号,这样子当我们修改类里面的信息后,还能被反序列化
2、请根据自己的语言表述IO流的体系

回复 使用道具 举报
1、序列化流中的serialVersionUID的作用

若是用对象序列化了一个对象后,修改了对象所属类文件,读取数据出现问题后就可以用serialVersionUID



2、请根据自己的语言表述IO流的体系



IO分为

字符流:

字符输入输出流

字符缓冲输入输出流

字节流:

字节输入输出流

字节缓冲输入输出流

特殊操作流:

标准输入输出流

字符打印流

对象序列化和反序列化流

properties集合
回复 使用道具 举报
今天是IO体系的最后一天,请根据自己的理解回答以下问题:
1、序列化流中的serialVersionUID的作用

序列化的时候系统会把当前类的serialVersionUID写入序列化的文件中,当反序列化的时候系统会检测当前文件中的serialVersionUID是否和当前类的serialVersionUID一致,如果我们修改了类,这个时候serialVersionUID就会发生变化,反序列化是无法成功的,serialVersionUID的作用是验证序列化的对象和对应类是否版本匹配。
static final long serialVersion = 序列号, 手动设置一个UID, 防止序列化又修改类导serialVersionUID不匹配。

2、请根据自己的语言表述IO流的体系

流是一种抽象的概念,数据在设备之间的传输称为流,流的本质是数据传输,IO是由Input和Output首字母组成的。IO流可分为字节流、字节流以及特殊流。
字节流:
InputStream这个抽象类是表示字节输入流的所有类的超类,最常用到的是FileInputStream和字节缓冲输入流 BufferedInputStream,FileInputStream读取方式可以一次读一个字节,也可以一次读一个或者部分字节数组。字节缓冲输入流 BufferedInputStream是FileInputStream的子类,创建缓冲流对象时,会在创建一个8192字节(默认)的缓冲区数组,会将这个缓冲数组读满,再一次性写入资源,减少交互次数,提高存储效率。

OutputStream这个抽象类是表示字节输出流的所有类的超类,最常用的是FileOutStream和字节缓冲输出流BufferedOutputStream,FileOutStream写入方式可以一次写一个字节,也可以一次写一个或者部分字节数组。字节缓冲输出流 BufferedOutputStream是FileOutputStream的子类,创建缓冲流对象时,会在创建一个8192字节(默认)的缓冲区数组,在读写数据时,会将这个缓冲数组读满,再一次性写入资源,减少交互次数,提高存储效率。

字符流:
字符流主要是用来处理操作文本的,实际由字节流和编码集组成,可以分为字符输入流和字符输出流。
Reader用于读取字符流的抽象类,子类字符输入流InputStreamReader也叫转换流,在创建对象时要将对应的字节输入流对象和编码传进去,根据编码去读字节,读数据的时候可以一次读一个字符,也可以一次读一个或者部分字符数组,但效率肯定不如字节输入流的。FileReader是InputStreamReader的子类,其功能更加强大,默认编码集是UTF-8,代码相对父类更为简洁,是常用的字符输入流BufferedReader是字符缓冲输入流,也是Reader的子类,和字节缓冲流一样,主要是提高字符的读取效率,不过其有特殊的的方法String readLine(),一次可以读一行文字。

Writer用于写入字符流的抽象类,子类字符输出流OutputStreamWriter也叫转换流,在创建对象时要将对应的字节输出流对象和编码传进去,根据编码去写字节,写数据的时候可以一次写一个字符,一次写一个或者部分字符数组,也可以一次写整个或者部分字符串。FileWrite是OutputStreamWriter的类,其功能更加强大,默认编码集是UTF-8,代码相对更为简洁,是最常用的字符输出流BufferedWriter是字符缓冲输出流,也是Writer的子类,和字节缓冲流一样,主要是提高字符的读取效率,不过其有特殊的的方法void newLine() 写一行行分隔符,行分隔符字符串由系统属性定义。

特殊流:
序列化流;
对象序列化就是将对象保存到磁盘中,或者在网络中传输对象。ObjectOutputStream是对象序列化流,用void writeObject(Object obj)将对象的原始数据写入OutputStream,可以永久存储,一个对象要想被序列化,该对象所属的类必须必须实现Serializable 接口。

对象反序列化就是从文件中读取回来,重构对象,对它进行反序列化。ObjectInputStream是对象反序列化流 。Object readObject(Object obj)从ObjectInputStream读取一个对象,对对象可以进行操作,一般将serialVersionUID给定一个固定值,防止修改了类,反序列化不成功。

打印流:
打印流将内容打印到指定目的地。打印流的特点是值负责输出数据,不负责读取数据。可以分为字节打印流PrintStream和字符打印流PrintWriter。字节打印流最常用的有print()和write()两种方法。字符打印流打印的是字符,println()和write()两种方法是常用的两种方法。

标准流:
标准输入流System.in可以从控制台读取数据,标准输出流System.out能将数据打印到控制台。

点评

666666  发表于 2019-6-27 18:13
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马