zoukankan      html  css  js  c++  java
  • Java核心技术及面试指南 IO部分的面试题归纳以及答案

    4.6.1 java中有几种类型的流?

        Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的.

    4.6.2字节流和字符流有什么差别?它们各自会用在哪些场合?

        stream结尾都是字节流,reader和writer结尾都是字符流。两者的区别就是读写的时候一个是按字节读写,一个是按字符。
    实际使用通常差不多。

        在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。
    只是读写文件,和文件内容无关的,一般选择字节流。

    4.6.3什么是java序列化?在哪些场合下需要用到序列化?如何实现java序列化?(或者问Serializable接口有什么作用?)

        序列化就是把Java对象储存在某一地方(硬盘、网络),也就是将对象的内容进行流化。

        反序列化:就是把二进制数据反序列化成对象数据。

        为什么要序列化?方便于传输、存储(内存中的对象状态保存到一个文件中或者数据库中;套接字在网络上传送对象;RMI)。JAVA序列化有哪些方式,通过实现Serialization接口,即可实现序列化。

    4.6.4 transient关键字有什么作用?

        Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。

    4.6.5读取xml文件有哪些方式?

        常见的有DOM和SAX方式。

    4.6.6用DOM和SAX解析xml文件方式的优缺点是什么?它们各自的适用范围是什么?

        在基于DOM的方式里,由于我们会把整个xml文档以DOM树的方式装载到内存里,所以可以边解析边修改,而且还能再次解析已经被解析过的内容。

        而在SAX的方式里,由于我们是以基于回调函数的方式来解析,所以并不需要把整个文档载入到内存,这样能节省内存资源。

        所以说,选择 DOM 还是 SAX,这取决于如下三个个因素。

        第一,如果我们在解析时还打算更新xml里的数据,那么建议使用DOM方式。

        第二,如果待解析的文件过大,把它全部装载到内存时可能会影响到内存性能,那么建议使用SAX的方式。

        第三,如果我们对解析的速度有一定的要求,那么建议使用SAX方式,因为它比DOM方式要快些。

  • 相关阅读:
    cf1100 F. Ivan and Burgers
    cf 1033 D. Divisors
    LeetCode 17. 电话号码的字母组合
    LeetCode 491. 递增的子序列
    LeetCode 459.重复的子字符串
    LeetCode 504. 七进制数
    LeetCode 3.无重复字符的最长子串
    LeetCode 16.06. 最小差
    LeetCode 77. 组合
    LeetCode 611. 有效三角形个数
  • 原文地址:https://www.cnblogs.com/JavaArchitect/p/8495860.html
Copyright © 2011-2022 走看看