流年似水博客开通了,本站主要是写关于Web和大数据方面内容,正在更新中,欢迎大家光临!
  1. 文章:97 篇
  2. 总浏览:33,975 次
  3. 评论:22条
  4. 最后更新:2020-06-08
  5. 分类目录:39 个

Java之IO流详解

Java l, xy 199℃ 0评论

0. IO流体系图

  1.   IO概述

(1)      输入输出流,可以通过IO技术实现在两个节点之间传入数据。一般指文件在硬盘、网络等设备上的传输。

  1.   IO分类

(1)      按流向分类

1           输出流

1)         其他节点(硬盘、网络、键盘输入、内存)-------->程序(内存)

2           输出流

1)         程序(内存)--------->其他节点(硬盘、网络、显示屏、内存)

(2)      按传输单位分类

1           字节流

1)         按照单个字节(8bit)传输,一般应用在二进制文件的读写上

2           字符流

1)         按照双字节(16bit)传输,一般应用在文本文件上读写中

(3)      按照角色分类

1           节点流

1)         功能比较基础,一般只做读写操作

2           处理流

1)         对节点流的一种包装,增强了其功能,提高了效率。

  1.   IO体系

(1)      四大抽象类

1           InputStream 字节输入流

1)         FileInputStream

2)         BufferedInputStream

3)         ObjectInputStream

2           OutputStream 字节输出流

1)         FileOutputStream

2)         BufferedOutputStream

3)         ObjectOutputStream

4)         PrintStream

3           Reader 字符输入流

1)         FileReader

2)         BufferedReader

3)         InputStreamReader

4           Writer 字符输出流

1)         FileWriter

2)         BufferedWriter

3)         OutputStreamWriter

4)         PrintWriter

 

  1.   常用的IO

(1)      基础流

1           FileInputStream

1)         构造方法

  1. public FileInputStream(String name)
  2. public FileInputStream(File file)
  3. public FileInputStream(FileDescriptor fdObj)

2)         常用方法

a)         int read()

b)        int read(byte[] bytes)

c)         int read(byte[] bytes,int off,int len)

d)        int available() : 返回可读取(或者可跳过(skip))的字节数,没有可读取字节数返回0

e)         long skip(long n):跳过指定n个字节,如果n0,则不跳过;n为整数,则向后跳过n个字节,并返回n,如果n为负数,则向前跳过n个字节(可以是已经读取过的字节),并返回n

f)          void close() : 关闭流

g)         FileDescriptor getFD() :获取该文件已经打开的文件描述

h)        FileChannal getChannel() :获取联系该输入流的唯一FileChannel

2           FileOutputStream

1)         构造方法

  1. public FileOutputStream(String name)
  2. public FileOutputStream(String name,boolean append) : append出入true为追加模式
  3. public FileOutputStream(File file)
  4. public FileOutputStream(File file,boolean append)
  5. public FileOutPutStream(FileDescriptor fdObj)

2)         常用方法

  1. void write(int b): 写入一个字符,b代表字符编码的码值
  2. void write(byte[] bytes)
  3. void write(byte{} bytes,int off,int len)
  4. void flush()
  5. void close()
  6. FileDescriptor getFD()
  7. FileChannel getChannel()

3           FileReader(继承了InputStreamReader

1)         构造方法

  1. public FileReader(String fileName)
  2. public FileReader(File file)
  3. public FileReader(FileDescriptor fdObj)

2)         常用方法

  1. int read()
  2. int read(char[] cbuf)
  3. int read(char[] cbuf,int off,int len)
  4. int read(java.nio.CharBuffer targer)
  5. long skip(long n) : 跳过n个字符,通用同FileInputStream的该方法;注意:该方法时阻塞的
  6. void close()
  7. boolean ready()
  8. void mark(int readAheadLimit)
  9. boolean markSupported()
  10. void reset()

4           FileWriter(继承了OutputStreamWriter

1)         构造方法:

  1. public FileWriter(String fileName)
  2. public FileWriter(String fileName,boolean append)
  3. public FileWriter(File file)
  4. public FileWriter(File file,bolean append)
  5. public FileWirter(FileDescriptor fd)

2)         常用方法:

  1. void write(int c)
  2. void write(char[] cbuf)
  3. void write(String str)
  4. void write(String str,int off,int len)
  5. Writer append(CharSequence csq)
  6. Writer append(CharSequence csq,int start,int end)
  7. void flush()
  8. void close()

(2)      处理流

1           缓冲流

1)         特点:

  1. 为了提高效率

2)         BufferedInputStream

  1. 构造方法:

a)         public BufferedInputStream(InputStream is)

b)        public BufferedInputStream(InputStream is,int size)

  1. 常用方法同InputStream

 

3)         BufferedOutputStream

  1. 构造方法 : 构造同BufferedInputStream
  2. 常用方法:常用方法通过OutputStream

4)         BufferedReader

  1. 构造方法:同BufferedInputStream
  2. 常用方法:

a)         String readLine() 读取一行,不包括换行符

b)        Stream<String> lines() 将读取的信息转换为Stream操作,更方便!

@Test
public void FileOutputStream() throws IOException {
    BufferedReader bufferedReader = new BufferedReader(new FileReader("test.xml"));
    Stream<String> lines = bufferedReader.lines();
    lines.forEach(System.out::println);
}

 

5)         BufferedWriter

  1. 构造方法:构造同BufferedInputStream
  2. 常用方法:

a)         void newLine() 换行

2           对象流

1)         使用:

  1. 必须套接在字节流上
  2. 只需要关闭最外层流即可

2)         功能:实现对对象的序列化和反序列化

  1. 序列化: 将对象持久化保存的过程
  2. 反序列化:将吃接话保存的对象读取到程序中的过程

3)         注意事项

  1. 序列化对象一定要具备可序列化的资格,一般是实现Serializable接口或者Externalizable
  2. 为了提高版本的兼容性,建议写上SerialVersionSID
  3. 序列化和反序列化顺序要相同
  4. 使用static 和 transient关键字修饰的字段不能被序列化
  5. 被序列化类的属性如果不使用static 和 transient关键字修饰,也必须是可序列化的
  6. 序列化是可继承的,如果父类已经实现了序列化接口,子类不必实现,也具备序列化的能力

4)         ObjectInputStreamInputStream的子类,具有InputStream的所有方法)(反序列化)

  1. 构造方法:

a)         public ObjectInputStream(InputStream in)

  1. 常用方法:

a)         Object readObejct()

b)        Object readUnShared()

c)         defaultReadObject()

d)        ObjectStream.GetFiled readFields()

e)         int read()

f)          boolean readBoolean()

g)         byte readByte()

h)        int readUnsignedByte()

i)           char readChar()

j)          short readShort()

k)         int readUnsignedShort()

l)           int readInt()

m)      long readLong()

n)        float readFloat()

o)        double readDouble()

p)        String readUTF()

q)        void readFully(byte[] buf)

r)          void readFully(byte[] buf,int off,int len)

s)         int skipBytes(int len)

t)          void registerValidation(ObjectInputValidation obj,int prio)

5)         ObjectOutputStream(序列化)

  1. 构造方法:

a)         ObjectOutputStream(OutputStram out)

  1. 常用方法:

a)         void writeObject(Object obj)

b)        void wirteUnshared(Object obj)

c)         void defaultWrite(Object obj)

d)        void writeBoolean(boolean val)

e)         void writeByte(int val)

f)          void writeShort(int val)

g)         void writeChar(int val)

h)        void writeInt(int val)

i)           void writeLong(long val)

j)          void writeFloat(float val)

k)         void writeDouble(doublet val)

l)           void writeBytes(String str)

m)      void writeChars(String str)

n)        void writeUTF(String str)

o)        void write(int val) 写入一个byte,没写完会阻塞

p)        void write(byte[] val)

q)        void write(byte[] val,int off,int len)

r)          ObjectOutputStream.PutField writeFields()

s)         void useProtocolVersion(int version)

(3)       

1           转换流

1)         作用:

  1. 将字节流转换为字符类
  2. 操作字符比字节流更高效

2)         特点:

  1. 可以指定字符编码

3)         InputSteamReader

  1. 构造方法

a)         public InputStreamReader(InputStream in)设置特色图片

b)        public InputStreamReader(InputStream in,String chasetName)

c)         public InputStreamReader(InputStream in,Charset cs)

d)        public InputStreamReader(InputStream in,CharsetDecoder dec)

  1. 常用方法:同Reader

 

4)         OutputStreamWriter

  1. 构造方法

a)         public OutputStreamWriter(OutputStream out)

b)        public OutputStreamWriter(OutputStream out,String charsetName)

c)         public OutputStreamWriter(OutputStream out,Charset cs)

d)        public OutputStreamWriter(OutputStream out,CharsetEncoder)

  1. 常用方法:同Writer

 

2           键盘输入输出流

1)         键盘输出:InputStream

2)         显示器输出:PrintStream

###标准输入输出流
 

类型

默认设备

表示

标准输入

键盘

System.in

InputStream

标准输出

显示器

System.out

PrintStream

错误提示

显示器

System.err

PrintStream

  
  
  可以重定向标准输入输出设备:

      System.setIn(InputStream);
    
      System.setOut(PrintStream);

3           打印流 : PrintWriter

1)         特点:

  1. 没有输入,只有输出
  2. 提供了一些非常实用的打印的方法,例如printprintlnprintf
  3. 除了调用构造器报编译异常(ClassNotFoundException),调用方法的时候不报错,自己处理了
  4. 打印流创建的时候调用指定的构造方法,可以实现自动刷新。也是仅仅限于printprintlnprintf等打印方法
  5. 打印流也可以指定字符

 

转载请注明:流年似水 » Java之IO流详解

喜欢 (1)or分享 (0)

Warning: copy(https://cn.gravatar.com/avatar/?s=54&d=%2Fwp-content%2Fthemes%2Fyusi1.0%2Fimg%2Fdefault.png&r=g): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 239

Warning: copy(/wp-content/themes/yusi1.0/img/default.png): failed to open stream: No such file or directory in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 243
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址