IO/NIO学习总结(一)

从今天开始每天把技术学习总结统统放到这里,哈哈密瓜。

 

 

 

1.Java I/O整体框架是什么样的?Java流分为那两种?

 

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

其中FilterInputStream ,FilterOutputStream,FilterReader,FillerWriterDecorator,用来包装。OutpurtStreamReader,InputStreamWriter是用来转换字节流到字符流。RandomAccessFile并不是从InputStreamOutputStream继承过来,它只实现 DataIputDataOutput方法。接口DataInput 中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数。如:readBoolean()readInt( )readLine( )readFully() 等。

接口DataOutput 中定义的方法主要是向流中写入基本类型的数据、或者写入一定长度的字节数组。如:writeChar( )writeDouble( )write( ) 等。

· 字节与字的主要区别是:字节是二进制的数据,字符也是二进制数据,但是这种数据包含有区域信息(字符集), 需要翻译才可以获取实际的信息。

· 输入流与输出流的主要区别是:输入流的主要作用是从流中读取数据,输出流的主要作用是向流中写入数据。

· 整个java.io 的核心都是采用了Decorator(装饰)模式

 

 

2.Java I/O设计原则是什么?什么是Decorator(装饰)模式?

 

JavaI/O设计原则:1)JavaI/O提供了一个称做链接的机制,可以将一个流与另一个流首尾相接,形成一个流管道的链接。这种机制实际上是一种被称为Decorator(装饰器)设计模式的应用。2)通过流的链接,可以动态的增加流的功能,而这种功能的增加是通过组合一些流的基本功能而动态获取。3我们要获取一个I/O对象,往往需要产生多个I/O对象,但是I/O库中Decorator的运用,提供了实现的灵活性。

 

3.Java I/O 的基本类和类方法?

 

1InputStream的基本方法

int read() throws IOException 读取一个字节以整数形式返回,如果返回-1已到输入流的末尾

void close() throws IOException 关闭流释放内存资源

long skip(long n) throws IOException 跳过n个字节不读

2OutputStream的基本方法

  void write(int b) throws IOException 向输出流写入一个字节数据

  void flush() throws IOException 将输出流中缓冲的数据全部写出到目的地

3Writer的基本方法

  void write(int c) throws IOException 向输出流写入一个字符数据

void write(String str) throws IOException将一个字符串中的字符写入到输出流

void write(String strint offsetint length)将一个字符串从offset开始的length个字符写入到输出流

  void flush() throws IOException  将输出流中缓冲的数据全部写出到目的地

4Reader的基本方法

int read() throws IOException 读取一个字符以整数形式返回,如果返回-1已到输入流的末尾

5File相关:

FileInputStreamFileOutputStream继承基类用于向文件中输入输出字节

FileReaderFileWriter继承基类用于向文件中输入输出字符

输出流在构造函数第二个参数可以设置true意义为跟在已有文件后进行输入

此类流会抛出FileNotFoundException需要对其进行显示捕捉

 

4.流的分类?

1)过滤流:使用节点流作为输入或输出。

过滤流是使用一个已经存在的输入流或输出流连接创建的。FilterInputStream,过滤流就是采用Decorator(模式)

2)缓冲流(也是过滤流一种):

缓冲流:缓冲流要套接在相应的节点流之上,提高了读写的效率。

此处理流的构造方法都得传相对应的基类类型

BufferedReader:提供了readLine方法用于高校读取一行字符串

BufferedWriter:提供了newLine用于写入一个行分隔符也就是换行

BufferedInputStream 没多大用处

BufferedOutputStream 没多大用处

3)转换流:

主要作用将字节流转换成字符流。用处较大!

转换流在构造时可以指定其编码集合

InputStreamReader需要和InputStream套接

OutputStreamWriter需要和OutputStream套接

例:OutputStreamWriter osw = new OutputStreamWriter new FileOutputStream(文件路径);

方法例:osw.getEncoding(); 获得流的编码方式

 

4)节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域。

类型

 字符流(Reader/Writer)

字节流(Input/Output)

File  

FileReader/FileWriter

FileInputStream/FileOutStream

MemoryArray

CharArrayReader/CharArrayWriter

ByteArrayInputStream/ByteArrayOutputStream

MemoryString

StringReader/StringWriter 

    --

Pipe

PipeReader/PipeWriter

PipeInputStream/PipeOutputStream

5)管道流:用于线程间的通信,一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入,要使管道流有用,必须同时构造管道输入流和管道输出流。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值