您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 字节流 >

java里字符流 字节流和序列化的区别?

发布时间:2019-07-13 23:14 来源:未知 编辑:admin

  还有为什么要序列化啊,计算机里不都是0和1吗,保存时候直接存到硬盘上不就行了,反正都是0和1,为什么还要先序列化啊?不序列化不能存是怎么滴?

  比如我要把一个字符串 大家好啊大家好啊这个字符串保存到硬盘的文本文件里,直接把每个字符的编码存到硬盘不就行了,难道也要先弄个序列化啥的,在传?

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部字节流可以序列化任何文件,包括图片音频等等,字符流只能对文字操作,比如txt文件,字节流序列化后的保存的文件时二进制文件,比如先写入一段文字,又写入一张照片,使其存储方便,且其他软件无法识别,只有按照写入的顺序序列化读取才可以识别,能够起到加密的作用。字符流生成的文件,用记事本即可看到内容。

  比如你写“大家好”,字节流打开后是乱码,字符流打开则是文字,不必用序列化的方式读取即可阅读到内容。

  序列化的好处就是一次可以写入一个对象,使其可以读取恢复,方便数据传输,比如服务器非即时的与客户端传递数据,现将其序列化存储,再用客户端以对象的方式读取,对于封装数据会很方便。

  以上均为个人见解,希望对你有所帮助。更多追问追答追问我好像明白了,就是说字符流和字节流都是一种格式,一般本文都是字符流格式的,如果用文本打开用字节流保存的内容就是乱码,因为保存时候你没有按文本的要求格式保存,所以必然是乱码。那序列化就是一种加密的字节流格式,也就是保存时候,先序列化变成字节流保存,等读取到内存反序列化,把字节流再变成字符流?

  也不能说是两种格式,字符只是按照某种约定一次性处理N个字节进行编码,从而可以文本显示,字节流则不管是什么都按单个字节处理,所以文本等任何软件都无法读取,只有按照你写入之前的约定进行编码才能读取内容。序列化的理解嘛,你就把它认为是java允许将一个对象写入文件的约定,也就是规则,因为对象中有各种属性方法,需要将这些组织成一个对象,这也就是规则,读取时再按照这个规则读取,就可以还原了。至于字符流字节流跟序列化没有关系。我感觉还是有点关系的,序列化的目的就是为了把对象编成字节流,如果不序列化,那传出去的就是字符流了或者没有秩序的字节流,这样的话下次读取的时候,也是没有秩序的字节流,这样运行的时候java虚拟机就影响效率了。所以序列化可以理解为一种编码和解码的东西,专门为特定格式比如对象,进行编码和解码用的。但终究到底在计算机里还是二进制0和1,那就是字节流.如果不序列化,是没办法将一个对象持久化的,只能逐一处理对象的属性,读取时再逐一读取,新建对象,并赋值,如果这个对象中有一个属性是另一个类,那么还要将这个类的属性逐一处理,如此反复下去。。。岂不麻烦。序列化就是干这个用的,至于选择字符流可能会显示文本,选择字节流可以加密,完全是另一回事了。

  字符流一般是对于中文文本的处理 比如音频啊什么的 他就处理不了了 这里就需要字节流的处理

  但是自我感觉还是字符流还用一点 最起码的是读取的方法简单一点 一般情况下 我们读取的文本文件也都是中文的吧

  至于序列化 其实不用也是可以 一样可以保存 但是那样保存的话要麻烦点 没有序列化简单

  展开全部Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。

  Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换。而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换。字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高。

  注释:不推荐使用 StringBufferInputStream 方法。此类不能将字符正确的转换为字节。

  同 JDK 1.1 版中的类似,从一个串创建一个流的最佳方法是采用 StringReader 类。

  PipedInputStream :实现了 pipe 的概念,主要在线程中使用 . 管道输入流是指一个通讯管道的接收端。

  一个线程通过管道输出流发送数据,而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯。

  PipedInputStream() 创建一个管道输入流,它还未与一个管道输出流连接。

  并且使它们像单个输入流一样出现。每个输入流依次被读取,直到到达该流的末尾。

  ByteArrayOutputStream : 把信息存入内存中的一个缓冲区中 . 该类实现一个以字节数组形式写入数据的输出流。

  toString(String) 根据指定字符编码将缓冲区内容转换为字符串,并将字节转换为字符。

  PipedOutputStream: 管道输出流是指一个通讯管道的发送端。一个线程通过管道输出流发送数据,

  (A)PipedOutputStream() 创建一个管道输出流,它还未与一个管道输入流连接。

  把一个以字节为导向的 stream 转换成一个以字符为导向的 stream 。

  InputStreamReader 类是从字节流到字符流的桥梁:它读入字节,并根据指定的编码方式,将之转换为字符流。

  InputStreamReader 的 read() 方法之一的每次调用,可能促使从基本字节输入流中读取一个或多个字节。

  catch (NumberFormatException e)// 当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。

  OutputStreamWriter 将多个字符写入到一个输出流,根据指定的字符编码将多个字符转换为字节。

  展开全部所谓serialization叫做 鳞次节比。别听那些小学语文不及格的说什么序列化。

  请问:要保存 一个 对象的图(graph),或者 对象层次树结构之类的东东,你要如何做?

  其实你自己另外处理,也一样。更多追问追答追问你说的我没明白 - - 还是直接回答我的问题,这样我好理解

  为了保存对象的结构所以用序列化,这个到时明白点了,那我传的不是对象,是一堆文字保存到硬盘里,这还需要什么格式吗?不用序列化能不能直接传字符流保存啊???追答当然可以。

  但是实际上还有不同的编码格式,比如utf,gb等等追问编码格式忽略不管它,我就说如果传输的是文字,还需要序列化吗?比如聊天,双方打字之间的传送,需要序列化吗 ?追答不是忽略,是你必须选择一种编码方式。

  这些数字需要你的格式,才能被你自己使用。追问好吧,按你说的现在选择GBK编码了,然后是直接能保存文字到硬盘了吗,还是保存前先来个序列化,然后在保存?

  现在就说下,保存字符串和序列化有关吗?追答真有点晕了。你不是这点有点明白了吗?

http://hazardlabo.com/zijieliu/246.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有