zoukankan      html  css  js  c++  java
  • java IO

    java中有几种类型的流?
    字符流和字节流。字节流继承inputStream和OutputStream,字符流继承自InputSteamReader和OutputStreamWriter。

    java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
    字节输入流:InputStream,字节输出流:OutputStream

    字符输入流:Reader,字符输出流:Writer

    什么是java序列化,如何实现java序列化?
    Java对象的序列化指将一个java对象写入OI流中,与此对应的是,对象的反序列化则从IO流中恢复该java对象。
    如果要让某个对象支持序列化机制,则必须让它的类是可序列化的,为了让某个类是可序列化的,该类必须实现Serializable接口或Externalizable接口

    解释一下java.io.Serializable接口(面试常考)

    类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。

    1. 读写原始数据,一般采用什么流?(AC )
    A InputStream
    B DataInputStream
    C OutputStream
    D BufferedInputStream

    2. 为了提高读写性能,可以采用什么流?( DF)
    A InputStream
    B DataInputStream
    C BufferedReader
    D BufferedInputStream
    E OutputStream
    F BufferedOutputStream

    3. 对各种基本数据类型和String类型的读写,采用什么流?( AD)
    A DataInputStream
    B BufferedReader
    C PrintWriter
    D DataOutputStream
    E ObjectInputStream
    F ObjectOutputStream

    4. 能指定字符编码的I/O流类型是:(BH )
    A Reader
    B InputStreamReader
    C BufferedReader
    D Writer
    E PrintWriter
    F ObjectInputStream
    G ObjectOutputStream
    H OutputStreamWriter

    5. File类型中定义了什么方法来判断一个文件是否存在?( D)
    A createNewFile
    B renameTo
    C delete
    D exists

    6. File类型中定义了什么方法来创建一级目录?( C)
    A createNewFile
    B exists
    C mkdirs
    D mkdir

    7. 对文本文件操作用什么I/O流?(AD )
    A FileReader
    B FileInputStream
    C RandomAccessFile
    D FileWriter

    9. 创建一个TCP客户程序的顺序是:(DACBE )
    A 获得I/O流
    B 关闭I/O流
    C 对I/O流进行读写操作
    D 建立socket
    E 关闭socket

    10. 创建一个TCP服务程序的顺序是:(BCADEGF )
    A 创建一个服务线程处理新的连接
    B 创建一个服务器socket
    C 从服务器socket接受客户连接请求
    D 在服务线程中,从socket中获得I/O流
    E 对I/O流进行读写操作,完成与客户的交互
    F 关闭socket
    G 关闭I/O流

    11. Java UDP编程主要用到的两个类型是:( BD)
    A UDPSocket
    B DatagramSocket
    C UDPPacket
    D DatagramPacket

    12. TCP/IP是一种:( B)
    A 标准 
    B 协议  
    C 语言  
    D 算法

    字符流和字节流有什么区别?
    要把一片二进制数据数据逐一输出到某个设备中,或者从某个设备中逐一读取一片二进制数据,不管输入输出设备是什么,我们要用统一的方式来完成这些操作,用一种抽象的方式进行描述,这个抽象描述方式起名为IO流,对应的抽象类为OutputStream和InputStream ,不同的实现类就代表不同的输入和输出设备,它们都是针对字节进行操作的。

    在应用中,经常要完全是字符的一段文本输出去或读进来,用字节流可以吗?
    计算机中的一切最终都是二进制的字节形式存在。对于“中国”这些字符,首先要得到其对应的字节,然后将字节写入到输出流。读取时,首先读到的是字节,可是我们要把它显示为字符,我们需要将字节转换成字符。由于这样的需求很广泛,人家专门提供了字符流的包装类。

    底层设备永远只接受字节数据,有时候要写字符串到底层设备,需要将字符串转成字节再进行写入。字符流是字节流的包装,字符流则是直接接受字符串,它内部将串转成字节,再写入底层设备,这为我们向IO设别写入或读取字符串提供了一点点方便。

    讲讲NIO

    答:看了一些文章,传统的IO流是阻塞式的,会一直监听一个ServerSocket,在调用read等方法时,他会一直等到数据到来或者缓冲区已满时才返回。调用accept也是一直阻塞到有客户端连接才会返回。每个客户端连接过来后,服务端都会启动一个线程去处理该客户端的请求。并且多线程处理多个连接。每个线程拥有自己的栈空间并且占用一些 CPU 时间。每个线程遇到外部未准备好的时候,都会阻塞掉。阻塞的结果就是会带来大量的进程上下文切换。 
    对于NIO,它是非阻塞式,核心类: 
    1.Buffer为所有的原始类型提供 (Buffer)缓存支持。 
    2.Charset字符集编码解码解决方案 
    3.Channel一个新的原始 I/O抽象,用于读写Buffer类型,通道可以认为是一种连接,可以是到特定设备,程序或者是网络的连接。

    String编码UTF-8和GBK的区别

    答:UTF-8是国际通用的编码,通用性比较好,GBK是国家编码,支持中文,但是相比UTF-8的通用性差,不过UTF-8占用的数据库比较大,所以相对反应速度要慢。

    什么叫对象序列化,什么是反序列化,实现对象序列化需要做哪些工作

    对象序列化,将对象以二进制的形式保存在硬盘上
    反序列化;将二进制的文件转化为对象读取
    实现serializable接口

    NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。

    下表总结了Java IO和NIO之间的主要区别:

    IO NIO
    面向流 面向缓冲
    阻塞IO 非阻塞IO
    选择器

    1、面向流与面向缓冲

         Java IO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

    2、阻塞与非阻塞IO

         Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。 线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。

    https://www.cnblogs.com/dolphin0520/p/3919162.html

  • 相关阅读:
    TeamWork#3,Week5,Scrum Meeting 11.16
    TeamWork#3,Week5,Scrum Meeting 11.6, 11.7, 11.11, 11.12
    TeamWork#3,Week5,Scrum Meeting 11.15
    TeamWork#3,Week5,Scrum Meeting 11.14
    TeamWork#3,Week5,Scrum Meeting 11.13
    TeamWork#3,Week5,Scrum Meeting 11.9
    TeamWork#3,Week5,Bing Input Method vs Sogou Input Method
    TeamWork#3,Week5,Scrum Meeting 11.4
    Daily Scrum10 11.14
    Daily Scrum9 11.13
  • 原文地址:https://www.cnblogs.com/acme6/p/9628929.html
Copyright © 2011-2022 走看看