精华内容
下载资源
问答
  • 输入流关闭问题

    2020-12-06 05:53:54
    <div><p>如题所示: 怎么在源码中没看到关闭输入流的方法 需要调用者自己手动关闭吗</p><p>该提问来源于开源项目:tobato/FastDFS_Client</p></div>
  • com.fasterxml.jackson.databind.ObjectMapper在读取输入流变量时候默认将会关闭输入流。如果你不希望关闭输入流,你可以设置JsonParser.Feature.AUTO_CLOSE_SOURCE参数为 false。本测试方法,可以在...

    com.fasterxml.jackson.databind.ObjectMapper 在读取输入流变量的时候默认的将会关闭输入流。

    如果你不希望关闭输入流,你可以设置 JsonParser.Feature.AUTO_CLOSE_SOURCE 参数为 false。

    本测试方法,可以在 https://github.com/cwiki-us-demo/serialize-deserialize-demo-java/blob/master/src/test/java/com/insight/demo/serialize/MessagePackSerializer.java 中找到。

    /**

    * Serialization Not Close input stream

    */

    @Test

    public void testMessagePackSerializationNotCloseInputStream() {

    logger.debug("testMessagePackSerializationNotCloseInputStream");

    try {

    File tempFile = File.createTempFile("messagepack-", "-cwiki.us");

    MessagePacker packer = MessagePack.newDefaultPacker(new FileOutputStream(tempFile));

    packer.packInt(42);

    packer.packString("Hello");

    packer.close();

    FileInputStream in = new FileInputStream(tempFile);

    ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory());

    objectMapper.configure(JsonParser.Feature.AUTO_CLOSE_SOURCE, false);

    System.out.println(objectMapper.readValue(in, Integer.class));

    System.out.println(objectMapper.readValue(in, String.class));

    in.close();

    tempFile.deleteOnExit();

    } catch (IOException ex) {

    logger.error("Serialize Error", ex);

    }

    }

    https://www.cwiki.us/display/Serialization/MessagePack+Jackson+Dataformat

    展开全文
  • 方法java.io.InputStream.close()用于关闭输入流并释放与该流关联所有系统资源。此方法不需要任何参数,也不返回任何值。此外,发生I / O错误时,将引发IOException。演示此程序如下所示-示例importjava.io....

    方法java.io.InputStream.close()用于关闭此输入流并释放与该流关联的所有系统资源。此方法不需要任何参数,也不返回任何值。此外,发生I / O错误时,将引发IOException。

    演示此的程序如下所示-

    示例import java.io.FileInputStream;

    import java.io.InputStream;

    public class Demo {

    public static void main(String[] args) throws Exception {

    InputStream i = null;

    int num = 0;

    try {

    i = new FileInputStream("C://JavaProgram//data.txt");

    num = i.available();

    System.out.println("The number of bytes are: " + num);

    i.close();

    num = i.available();

    System.out.println("The number of bytes are: " + num);

    } catch(Exception e) {

    System.out.print("Error!!! The input stream is closed");

    }

    }

    }

    上面程序的输出如下-

    输出结果The number of bytes are: 4

    Error!!! The input stream is closed

    展开全文
  • 但是JVM对外部资源引用却无法自动回收,例如数据库连接,网络连接以及输入输出IO等,这些连接就需要我们手动去关闭,不然会导致外部资源泄露,连接池溢出以及文件被异常占用等。传统手动释放外部资源一般放在...

    前言

    JAVA的一大特性就是JVM会对内部资源实现自动回收,即自动GC,给开发者带来了极大的便利。但是JVM对外部资源的引用却无法自动回收,例如数据库连接,网络连接以及输入输出IO流等,这些连接就需要我们手动去关闭,不然会导致外部资源泄露,连接池溢出以及文件被异常占用等。

    传统的手动释放外部资源一般放在一般放在try{}catch(){}finally{}机制的finally代码块中,因为finally代码块中语句是肯定会被执行的,即保证了外部资源最后一定会被释放。同时考虑到finally代码块中也有可能出现异常,finally代码块中也有一个try{}catch(){},这种写法是经典的传统释放外部资源方法,显然是非常繁琐的。

    传统写法操作io流

    例如如下读取的文件的io流,我们之前可能会这样写

    public class Main {

    public static void main(String[] args) {

    FileInputStream fileInputStream =null;

    try {

    fileInputStream = new FileInputStream(new File("/Users/laoniu/a.txt")); //打开流

    byte[] bytes = new byte[1024];

    int line = 0;

    //读取数据

    while ((line = fileInputStream.read(bytes))!= -1){

    System.out.println(new String(bytes,0,line));

    }

    } catch (IOException e) {

    e.printStackTrace();

    }finally {

    if (fileInputStream != null){ //不为空

    try {

    fileInputStream.close(); //关闭流

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    }

    }

    使用try-with-resource写法优雅操作io流

    public class Main {

    public static void main(String[] args) {

    //把打开流的操作都放入try()块里

    try( FileInputStream fileInputStream = new FileInputStream(new File("/Users/laoniu/a.txt"))) {

    byte[] bytes = new byte[1024];

    int line = 0;

    while ((line = fileInputStream.read(bytes))!= -1){

    System.out.println(new String(bytes,0,line));

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    在try()中可以编写多个文件io流或网络io流。让我们看看java编译器是怎么帮我们实现的

    借助idea查看编译后的代码

    60cdcbb319a6ad032a7853a38057ee25.png

    可以看到编译后的代码,java编译器自动替我们加上了关闭流的操作。所以跟我们自己关闭流是一样的。try-with-resource这样优雅的写法还是不错的,让代码看起来不那么臃肿。

    注意jdk1.7以后才可以用

    总结

    到此这篇关于try-with-resource优雅关闭io流的文章就介绍到这了,更多相关try-with-resource优雅关闭io流内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    展开全文
  • 节点流:可以从或向一个特定的地方...处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。JAVA常用的节点流:文 件 FileInputStream FileOutputStrean FileReader ...

    节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.

    处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

    JAVA常用的节点流:

    文 件   FileInputStream FileOutputStrean FileReader FileWriter

    对文件进行处理的节点流。

    字符串    StringReader StringWriter

    对字符串进行处理的节点流。

    数 组  ByteArrayInputStream ByteArrayOutputStreamCharArrayReader CharArrayWriter

    对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。

    管 道 PipedInputStream PipedOutputStream PipedReaderPipedWriter

    对管道进行处理的节点流。

    常用处理流(关闭处理流使用关闭里面的节点流)

    缓冲流:BufferedInputStrean BufferedOutputStream BufferedReader BufferedWriter

    ---增加缓冲功能,避免频繁读写硬盘。

    转换流:InputStreamReader OutputStreamReader

    实现字节流和字符流之间的转换。

    数据流 DataInputStream DataOutputStream 等-

    提供将基础数据类型写入到文件中,或者读取出来.

    流的关闭顺序

    一般情况下是:先打开的后关闭,后打开的先关闭

    另一种情况:看依赖关系,如果流a依赖流b,应该先关闭流a,再关闭流b。例如,处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b

    可以只关闭处理流,不用关闭节点流。处理流关闭的时候,会调用其处理的节点流的关闭方法。

    注意:

    如果将节点流关闭以后再关闭处理流,会抛出IO异常。

    展开全文
  • com.fasterxml.jackson.databind.ObjectMapper在读取输入流变量时候默认将会关闭输入流。如果你不希望关闭输入流,你可以设置JsonParser.Feature.AUTO_CLOSE_SOURCE参数为 false。本测试方法,可以在...
  • 今天遇到问题是,关闭输入流后,依然无法删除文件。解决方法如下: 1.关闭流 2.System.gc() 3.删除文件 public static void del(String path){ try { File f = new File(path); if (f.exists()) { ...
  • com.fasterxml.jackson.databind.ObjectMapper在读取输入流变量时候默认将会关闭输入流。 如果你不希望关闭输入流,你可以设置JsonParser.Feature.AUTO_CLOSE_SOURCE参数为 false。 本测试方法,可以在ht...
  • 写一个模拟浏览器时候,使用inputstreamread方法读取服务器这边数据时,发现一直不返回。代码如下:public static void main(String[] args) throws IOException { InputStream inputStream = null; ...
  • Socket中输入输出流关闭的正确操作

    千次阅读 2019-08-12 18:20:48
    Java的socket是一个全双工套接字,任何的输入流或输出流的close()都会造成Socket关闭。 解决办法:使用socket.shutdownOutput()方法关闭套接字的输出流,使服务器知道输出流关闭,可以得到流末尾标志(-1)。 同样,...
  • java输入流关闭异常

    2021-04-10 17:17:53
    Java程序类中多个方法输入scanner,main运行异常。删去所有方法的in.close()后可以运行。图一是保留了in.close()运行结果,图二为把所有in.close()注释掉结果。软件是myeclipse2016 ...
  • 3.关闭流对象 以下是具体代码,包含注释 public static void main(String[] args) throws IOException { int index; byte[] bytes = new byte[100];//数组长度为100 FileInputStream fis=new FileInputSt
  • 用java写的,socket连接后另开一个线程实时监听输入流,但是如果服务器那边发生异常中断了,我这边也利用心跳机制知道有异常,需要断掉socket重新连,但是监听输入流的线程就卡在read的那个方法里了,怎么才能从那个...
  • JAVA输入输出关闭

    千次阅读 2015-02-01 11:24:03
    昨天写了一个读取配置文件的方法,打开了InputStream 输入流 读取了配置文件信息。 在本地测试tomcat时,没发现问题 。 讲模块打包放到linux服务器上部署的Weblogic...修改代码,关闭输入流。。。 环境恢复正常。。。
  • 当我从该文件通过ImageIO.read(InputStream)读取图像时,它读取图像,可以,但是方法关闭了给定的输入流,因此我无法继续读取其他数据。为什么会这样呢?那么如何在不关闭流的情况下读取图像?编辑 :这是将图像和...
  • 对于输入流,试图关闭流时发生异常对程序来说可能不太重要,因为执行关闭方法说明已经获取到了所需要内容。而对于输出流,在关闭流时抛出异常必须与实际使用流时抛出异常同等...
  • 前言前几天看了一篇文章(见参考文章),自己动手试了下,发现有些不一样结论,作博客记录下,本文主要研究两个问题:1、包装流的close方法是否会自动关闭被包装的流?答:会。2、关闭方法是否有顺序?答:无。一、...
  • 文件的输入流

    2017-10-30 21:36:00
    不管是字节流或者字符流,在...之后使用该对象的方法read()从哪个流中读取信息,即返回读取一个字节; 完成了从流中读取信息之后,调用close()方法关闭对流的使用。 文件输入流可以使用构造方法FileInputStre...
  • 从下一次调用此输入流的方法返回可从该输入流读取(或跳过)的字节数,而不会阻塞。 void close​() 关闭此输入流并释放与流相关联的任何系统资源。 void mark​(intreadlim..
  • 输入流:ByteArrayInputStream read(byte[] b, int off, int len) + close() 输出流:ByteArrayOutputStream write(byte[] b, int off, inet len) + toByteArray() 不要使用多态 /** * 字节数组 节点流 * 数组...
  • 字符输入流java.io.Reader: 字符输入流的顶层抽象父类共性的成员方法:int read()读取单个字符,并返回。int read(char[] cbuf)将字符读入数组。abstract int read(char[] cbuf, int off, int len)将字符读入数组的...
  • 有好长时间纠结在下载暂停之后,输入流关闭不掉。后来问过几个人,都是专门使用子线程来关闭,而且使用时间有时候甚至长达五分钟。 表面上问题解决了,但是存在一个隐患是实际上连接没有断掉,而一直被客户端...
  • java.io.InputStream 字节输入流 java.io.OutputStream 字节输出流 java.io.Reader 字符输入流 java.io.Writer 字符输出流 这四个都是抽象类。 close()方法和flush()方法 所有流都实现了: java.io.Closeable...
  • 字节输入流

    2021-03-08 14:51:46
    java.io.InputStream抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中,它定义了字节输入流的基本共性功能方法。 磁盘-->内存 public void close():关闭输入流并释放与此流相关联的任何系统...
  • 方法已用于在Java中将数据从输入流复制到输出流。这意味着它将从输入流中读取所有字节,然后按读取顺序将字节写入输出流。语法publiclongtransferTo(OutputStreamout)throwsIOException示例importjava.util.Arrays...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,483
精华内容 593
关键字:

关闭输入流的方法