Java流关闭总结

ava中流中引用close方法总结

1.由Java.io包中的对象生成实例的close方法使用情况

BufferedInputStream bis = new BufferedInputStream(new InputStreamReader(new FileInputStream()))

BufferedInputStream类

public void close()
    throws IOException
  {
    byte[] arrayOfByte;
    while ((arrayOfByte = this.buf) != null)
    {
      if (!bufUpdater.compareAndSet(this, arrayOfByte, null))
        continue;
      InputStream localInputStream = this.in;
      this.in = null;
      if (localInputStream != null)
        localInputStream.close();
      return;
    }

BufferedInputStream中的close方法中的localInputStream参数的值就是在创建BufferedInputStream实例时传入的对象

InputStreamReader类

public void close()
    throws IOException
  {
    this.sd.close();
  }

InputStreamReader类中的close方法也是在创建InputStreamReader实例时传入的对象。

所以,在Java中使用流的组合时,只需要关闭最外层的流就会把所有在这个最外层中会引用到的流都关闭。

以上BufferedInputStream类和InputStreamReader类的源码皆取自在jdk中的rt.jar包中。

2.有Java.net.Socket 类获取到的流对象
  InputStream in = new Socket("ip",port).getInputStream();
  此类流的关闭情况如下:
  1.直接关闭socket:socket.close();在关闭socket的同时也会关闭由socket创建的流
  2.in.close() 在关闭流的同时也会关闭socket通讯,

时间: 2024-10-22 05:18:15

Java流关闭总结的相关文章

Java流的正确关闭方式

因为流是无论如何一定要关闭的,所以要写在finally里.如下: BufferedReader reader = null; try { reader = (BufferedReader) getReaderFromFile(file); …… } catch (IOException e) { throw e; } finally { if (reader != null) { try { reader.close(); } catch (IOException e){ throw e; }

Java IO流关闭问题的深入研究

转自:https://blog.csdn.net/maxwell_nc/article/details/49151005 前几天看了一篇文章(见参考文章),自己动手试了下,发现有些不一样结论,作博客记录下,本文主要研究两个问题: 包装流的close方法是否会自动关闭被包装的流?关闭流方法是否有顺序?包装流的close方法是否会自动关闭被包装的流?平时我们使用输入流和输出流一般都会使用buffer包装一下, 直接看下面代码(这个代码运行正常,不会报错) 1 import java.io.Buffe

Java流家族之InputStream、OutputStream

Java流家族之InputStream 实现的接口: Closeable , AutoCloseable 已知直接子类: AudioInputStream , ByteArrayInputStream , FileInputStream , FilterInputStream , InputStream , ObjectInputStream PipedInputStream , SequenceInputStream , StringBufferInputStream 具体的方法: Modif

Core Java - 流(Stream) - 字节流和字符流(一)

0. 概述: Java中基于流的I/O构建在4个抽象类之上, 其中2个是字节流,另外2个是字符流. 字节流: InputStream / OutputStream 当操作字节或其它二进制对象时,应当使用字节流. 字符流: Reader / Writer 当操作字符或字符串时,应当使用字符流. 1. InputStream InputStream:   输入字节流,它是一个抽象类. 常用主要方法: int read() 返回代表下一个可用字节的整数,当文件达到末尾时,返回-1. int read(

java 流与文件理解

一.数据流 1.流 在Java中把不同的数据源与程序之间的数据传输都抽象表述为"流"(stream),以实现相对统一和简单的输入/输出操作方式.传输中的数据就像流水一样,也称为数据流. 2 .I/O数据流的分类方式 数据流分为输入流和输出流两类.输入流只能读取不能写.而输出流只能写不能读.(这里站在程序的角度来确定出入方向,即将数据从程序外部传送到程序中谓之"输入"数据,将程序中的数据传送到外部谓之"输出"数据.) 二.字符流 1.字符输入流Re

Java流(Stream)、文件(File)和IO

Java流(Stream).文件(File)和IO Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序列.输入流表示从一个源读取数据,输出流表示向一个目标写数据. Java为I/O提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中. 但本节讲述最基本的和流与I/O相关的功能.我们将通过一个个例子来学习这些功能. 读取控制台输入 Jav

Java笔记:Java 流(Stream)、文件(File)和IO

更新时间:2018-1-7 12:27:21 更多请查看在线文集:http://android.52fhy.com/java/index.html java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. 输入输出流 简介 一个流被定义为一个数据序列.输入流用于从源读取数据,输出流用于向目标写数据. 下图是一个描述输入流和输出流的类层次图: 在java.io包中操作文件内容的主要有两大类:字节流.字符流,两类都分为输入和输出操作. 在字节流中输出数据主要是使用

告别复杂的流关闭

一.引言 也许大家在使用流时因为未关闭.或者未正常关闭引发了很多问题.其实java7引入了自动关闭流机制,只是我们未使用而已. 二.自动关闭流例子 public class AutoCloseTest {    public static void main(String[] args) throws IOException {        //将打开流代码放到try中        try (                BufferedReader br = new BufferedRe

Java学习记录(补充八:Date类;Java流(Stream),文件(File)和IO)

Date类,Calendar类package Box1; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Random; //Date类 public class DateTest { public static void main(String[] args) { Date