Java IO:常见Java IO流介绍(ByteArrayInputStream,ObjectInputStream,BufferedInputStream)
2017-04-10 11:17
603 查看
在接触 Java IO 流的时候,个人觉得需要首先理解 装饰器模式,否则,当看到 如下的代码 会比较纠结:
然后,由于 Java 的 IO 流比较多,不同的流可以应对不同情景,下面举例介绍几种常见的流:
FileInputStream
ByteArrayInputStream
ObjectInputStream
BufferedInputStream
DataInputStream
FileInputStream
用于读取文件内容。常用的有两种构造函数,例如:
其中 name 和 file 都是指向 需要读取的文件。Demo:
需要注意的是 try-catch-finally
ByteArrayInputStream
ByteArrayInputStream,主要是应对流的来源和目的地不一定是文件这种情况,比如说可能是内存,可能是数组。例如:
ObjectInputStream
ObjectInputStream 可以用于读取对象,但是读取的对象必须实现 Serializable 接口。
BufferedInputStream
BufferedInputStream 提供了一个缓冲的功能,可以避免大量的磁盘IO。因为像FileInputStream 这种,每一次的读取,都是一次磁盘IO。
DataInputStream
该类的主要作用是可以返回一些基本类型或者是String类型,否则的话,只能返回byte类型的数据,利用该类,我们可以更好的操作数据。
InputStream inputStream = new BufferedInputStream(new FileInputStream(filePath));
然后,由于 Java 的 IO 流比较多,不同的流可以应对不同情景,下面举例介绍几种常见的流:
FileInputStream
ByteArrayInputStream
ObjectInputStream
BufferedInputStream
DataInputStream
FileInputStream
用于读取文件内容。常用的有两种构造函数,例如:
public FileInputStream(String name) throws FileNotFoundException { this(name != null ? new File(name) : null); } public FileInputStream(File file) throws FileNotFoundException { ... }
其中 name 和 file 都是指向 需要读取的文件。Demo:
public class Test{ public static void main(String[] args) { InputStream inputStream = null; try { inputStream = new FileInputStream("/Users/yunxin/Desktop/a"); byte data[] = new byte[inputStream.available()]; inputStream.read(data); System.out.println(new String(data)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(inputStream != null){ try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
需要注意的是 try-catch-finally
ByteArrayInputStream
ByteArrayInputStream,主要是应对流的来源和目的地不一定是文件这种情况,比如说可能是内存,可能是数组。例如:
public class Test{ public static void main(String[] args) { byte data[] = "abc".getBytes(); InputStream inputStream = new ByteArrayInputStream(data); byte data0[] = new byte[data.length]; try { inputStream.read(data0); System.out.println(new String(data0)); } catch (IOException e) { e.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
ObjectInputStream
ObjectInputStream 可以用于读取对象,但是读取的对象必须实现 Serializable 接口。
public class Test{ public static void main(String[] args) { ObjectOutputStream objectOutputStream = null; try { objectOutputStream = new ObjectOutputStream(new FileOutputStream("/Users/yunxin/Desktop/a")); User user = new User(); user.setNum(2); objectOutputStream.writeObject(user); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(objectOutputStream != null){ try { objectOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } } class User implements Serializable{ private static final long serialVersionUID = -8987587467273881932L; private int num; public int getNum() { return num; } public void setNum(int num) { this.num = num; } @Override public String toString() { return "User [num=" + num + "]"; } }
BufferedInputStream
BufferedInputStream 提供了一个缓冲的功能,可以避免大量的磁盘IO。因为像FileInputStream 这种,每一次的读取,都是一次磁盘IO。
public class Test{ public static void main(String[] args) { BufferedInputStream bufferedInputStream = null; try { bufferedInputStream = new BufferedInputStream(new FileInputStream("/Users/yunxin/Desktop/a")); byte data[] = new byte[bufferedInputStream.available()]; bufferedInputStream.read(data); System.out.println(new String(data)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(bufferedInputStream != null){ try { bufferedInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
DataInputStream
该类的主要作用是可以返回一些基本类型或者是String类型,否则的话,只能返回byte类型的数据,利用该类,我们可以更好的操作数据。
public class Test{ public static void main(String[] args) { DataOutputStream dataOutputStream = null; try { dataOutputStream = new DataOutputStream(new FileOutputStream("/Users/yunxin/Desktop/a")); dataOutputStream.writeInt(999); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(dataOutputStream != null){ try { dataOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
相关文章推荐
- Java IO之DataInputStream,ObjectInputStream,ByteArrayInputStream等
- Java IO:ByteArrayInputStream使用详解及源码分析
- Java IO (3)--ByteArrayInputStream
- java基本I/O系列--ByteArrayInputStream 介绍
- Java IO 系列源码分析——ByteArrayInputStream和ByteArrayOutputStream
- 转存:JAVA IO - ByteArrayInputStream和BufferedInputStream的区别
- Java IO操作——内存操作流{ByteArrayInputStream、ByteArrayOutputStream)
- 流 JAVA IO 基本小结 通过一行常见的代码讨论:new BufferedReader(new InputStreamReader(System.in))
- java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream)
- Java IO ByteArrayInputStream和ByteArrayOutputStream
- struts2下载文件时出错提示:java.lang.ClassCastException: java.io.ByteArrayInputStream cannot be cast to java.l
- java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream)
- java.io.ByteArrayInputStream 源码分析
- java-(IO)之InputStream,FileInputStream,,Reader,PipedInputStream,ByteArrayInputStream
- 流 JAVA IO 基本小结 通过一行常见的代码讨论:new BufferedReader(new InputStreamReader(System.in))
- Java之IO(三)ByteArrayInputStream和ByteArrayOutputStream
- 黑马程序员——Java IO—字节流—ByteArrayInputStream和ByteArrayOutputStream
- java.io中的read方法详解(尤其在数组流即在ByteArrayInputStream中)
- 黑马程序员_java_IO流_FileInputStream_FileOutputStream_File_递归_Properties_ByteArrayInputStream_ByteArrayOut
- Java IO流学习总结六:ByteArrayInputStream、ByteArrayOutputStream