Java基础:IO 流中的 flush

Fluent后台计算中Journal文件的自动化编写与优化实践 本文深入探讨了Fluent在Linux/Unix环境下进行后台计算时,Journal文件的自动化编写与优化实践。Journal文件作为Fluent后台计算的“灵魂”,是实现仿真流程自动化、保证计算可重复性与准确性的关键。文章从基础脚本骨架搭建、命令简写技巧,到进阶的参数化研究与批量计算实现,提供了详实的实战指南,帮助工程师大幅提升仿真效率。 阅读详情

Java设计Io流可谓是煞费苦心,如果你是初学者我敢保证第一次接触Java的IO类,一定会“狂晕!!”,晕,倒不是因为它有多么难学,而是太多,而且及其让人容易迷惑。在编程日子中,尤其是在网络编程中,几乎离不开Java的IO,关于Java的IO流的分类,可以到网上soso,今天跟大家分享一下flush方法。

1.  OutputStream类的flush方法

该类实现了Flushable接口,所以重写了flush方法,看看flush()源码,会更加的让你明白:

[java]  view plain  copy
 print ?
  1. public void flush() throws IOException {  
  2. }  
 

sorry,该实现为空。就是一个空方法,什么也不做。看清楚啊,该方法不是抽象方法,是一个实实在在的方法。除了方法体中一无所有,其它还好!!!汗!!!看JDK的api如何解释!

[java]  view plain  copy
 print ?
  1. flush  
  2. public void flush()  
  3.            throws IOException  
  4. 刷新此输出流并强制写出所有缓冲的输出字节。flush 的常规协定是:如果此输出流的实现已经缓冲了以前写入的任何字节,则调用此方法指示应将这些字节立即写入它们预期的目标。  
  5. 如果此流的预期目标是由基础操作系统提供的一个抽象(如一个文件),则刷新此流只能保证将以前写入到流的字节传递给操作系统进行写入,但不保证能将这些字节实际写入到物理设备(如磁盘驱动器)。  
  6. OutputStream 的 flush 方法不执行任何操作。  
  7. 指定者:  
  8. 接口 Flushable 中的 flush  
  9. 抛出:  
  10. IOException - 如果发生 I/O 错误。  
 

开始,我安慰自己,该类是一个抽象类,它的子类肯定重写了该方法。好吧,OutputStream的直接子类有:

[java]  view plain  copy
 print ?
  1. ByteArrayOutputStream  
  2. FileOutputStream   
  3. FilterOutputStream  
  4. ObjectOutputStream  
  5. OutputStream  
  6. PipedOutputStream  
 

注意:这里的子类OutputStream是包 org.omg.CORBA.portable 的。

对于FileOutputStream、ByteArrayOutputStream、org.omg.CORBA.portable.OutputStream类它们的flush()方法均是从父类继承的flush方法。

FilterOutputStream类重写了flush()方法,但是实质还是调用父类的flush方法。

ObjectOutputStream、PipedOutputStream类重写了flush()方法。

好吧,来两个个小例子,很简单,第一个例子主要是向文本中写入字符串,第二个例子向文本中写入一定字节的数据,如下代码:

[java]  view plain  copy
 print ?
  1. package mark.zhang;  
  2. import java.io.BufferedOutputStream;  
  3. import java.io.DataOutputStream;  
  4. import java.io.File;  
  5. import java.io.FileOutputStream;  
  6. public class Test {  
  7.     public static void main(String[] args) throws Exception {  
  8.         File file = new File("text.txt");  
  9.         if(!file.exists()) {  
  10.             file.createNewFile();  
  11.         }  
  12.         FileOutputStream fos = new FileOutputStream(file);  
  13.         BufferedOutputStream bos = new BufferedOutputStream(fos);  
  14.         DataOutputStream dos = new DataOutputStream(fos);  
  15.         dos.writeBytes("java io");  
  16.     }  
  17. }  
 

[java]  view plain  copy
 print ?
  1. package mark.zhang;  
  2. import java.io.BufferedOutputStream;  
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. public class Test {  
  6.     public static void main(String[] args) throws Exception {  
  7.         File file = new File("text.txt");  
  8.         if(!file.exists()) {  
  9.             file.createNewFile();  
  10.         }  
  11.         FileOutputStream fos = new FileOutputStream(file);  
  12.         BufferedOutputStream bos = new BufferedOutputStream(fos);  
  13.         byte[] b = new byte[1024*8];  
  14.         bos.write(b);  
  15.         bos.flush();  
  16.     }  
  17. }  
 

这两段代执行后,分别会在当前目录下产生7字节的文件(内容为java io)和1KB字节的文件。说到这里,有些人会说,这有什么稀奇,至于吗???呵呵,别急,淡定!!现在修改第二个代码,主要是注释掉调用flush()方法,如下:

[java]  view plain  copy
 print ?
  1. package mark.zhang;  
  2. import java.io.BufferedOutputStream;  
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. public class Test {  
  6.     public static void main(String[] args) throws Exception {  
  7.         File file = new File("text.txt");  
  8.         if(!file.exists()) {  
  9.             file.createNewFile();  
  10.         }  
  11.         FileOutputStream fos = new FileOutputStream(file);  
  12.         BufferedOutputStream bos = new BufferedOutputStream(fos);  
  13.         byte[] b = new byte[1024];  
  14.         bos.write(b);  
  15.         //bos.flush();  
  16.     }  
  17. }  
 

ok,再次运行代码,额的神啊???文件大小居然是o字节。why????flush()方法有那么神奇,汗??!!!

仔细的你会发现,第一个代码并没有调用flush()方法,居然可以。为什么第二个就不可以呢?还是看源码,有说服力。

DataOutputStream继承FilterOutputStream,实现了DataOutput接口。我们知道FilterOutputStream类重写了flush()方法,但是实质还是调用父类的flush方法。DataOutputStream类的flush()方法效仿其父类FilterOutputStream的做法,如下:

[java]  view plain  copy
 print ?
  1. public void flush() throws IOException {  
  2.     out.flush();  
  3. }  
 

那么,即使你在代码后面加上dos.flush();与不加是一样的效果,因为它们的父类flush()方法均为空,这就是为什么第一个代码的神奇所在。再看看第二个代码的病因在哪里?先看看BufferedOutputStream类的结构:

[java]  view plain  copy
 print ?
  1. public class BufferedOutputStream extends FilterOutputStream   
 

再看看,它的flush()方法:

[java]  view plain  copy
 print ?
  1. public synchronized void flush() throws IOException {  
  2.         flushBuffer();  
  3.     out.flush();  
  4. }  
 

[java]  view plain  copy
 print ?
  1. /** Flush the internal buffer */  
  2. private void flushBuffer() throws IOException {  
  3.     if (count > 0) {  
  4.  out.write(buf, 0, count);  
  5.  count = 0;  
  6.     }  
  7. }  
 

不错,该类重写了flush()方法,不像前面几个那样不是继承就是山寨父类的flush()方法。BufferedOutputStream 类是一个使用了缓冲技术的类。这种类一把都会自己实现flush()方法。

那么,有人会问使用这种类的时候,难道必须使用flush()方法吗,当然不是喽??!!不过有个前提,你的字节数据必须不能小于8KB。实例代码,注意没有flush()方法。

[java]  view plain  copy
 print ?
  1. package mark.zhang;  
  2. import java.io.BufferedOutputStream;  
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. public class Test {  
  6.     public static void main(String[] args) throws Exception {  
  7.         File file = new File("text.txt");  
  8.         if(!file.exists()) {  
  9.             file.createNewFile();  
  10.         }  
  11.         FileOutputStream fos = new FileOutputStream(file);  
  12.         BufferedOutputStream bos = new BufferedOutputStream(fos);  
  13.         byte[] b = new byte[1024*8];  
  14.         bos.write(b);  
  15.         //bos.flush();  
  16.     }  
  17. }  
 

执行代码,会产生8KB的文本文件。当然,怎么可能你每时每刻都知道你的数据一定会不小于8KB呢,所以还是调用flush()方法比较安全。不过,话又说回来,一般用完IO流之后(如果你有一个好的习惯)我们都会去调用close()方法,看源码可以知道该方法也是调用相对应的flush()方法。所以,大多数情况下你不必要担心。这里提醒一下,如果你的文件读写没有达到预期目的,十之八九是因为你没有调用flush()或者close()方法。

另外,字符流类大多数都实现了flush()或者close()方法,只不过,它们调用的是StreamEncoder类的该方法。该类位于sun.nio.cs包下面,其源码在我们jdk中是没有的。源码地址:http://www.docjar.com/html/api/sun/nio/cs/StreamEncoder.java.html。在此,ctrl+v其源码,如下:

[java]  view plain  copy
 print ?
  1. /* 
  2.  * Copyright 2001-2005 Sun Microsystems, Inc.  All Rights Reserved. 
  3.  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 
  4.  * 
  5.  * This code is free software; you can redistribute it and/or modify it 
  6.  * under the terms of the GNU General Public License version 2 only, as 
  7.  * published by the Free Software Foundation.  Sun designates this 
  8.  * particular file as subject to the "Classpath" exception as provided 
  9.  * by Sun in the LICENSE file that accompanied this code. 
  10.  * 
  11.  * This code is distributed in the hope that it will be useful, but WITHOUT 
  12.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
  13.  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
  14.  * version 2 for more details (a copy is included in the LICENSE file that 
  15.  * accompanied this code). 
  16.  * 
  17.  * You should have received a copy of the GNU General Public License version 
  18.  * 2 along with this work; if not, write to the Free Software Foundation, 
  19.  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 
  20.  * 
  21.  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 
  22.  * CA 95054 USA or visit www.sun.com if you need additional information or 
  23.  * have any questions. 
  24.  */  
  25.   
  26.   
  27.   
  28. package sun.nio.cs;  
  29.   
  30. import java.io;  
  31. import java.nio;  
  32. import java.nio.channels;  
  33. import java.nio.charset;  
  34.   
  35. public class StreamEncoder extends Writer  
  36. {  
  37.   
  38.     private static final int DEFAULT_BYTE_BUFFER_SIZE = 8192;  
  39.   
  40.     private volatile boolean isOpen = true;  
  41.   
  42.     private void ensureOpen() throws IOException {  
  43.         if (!isOpen)  
  44.             throw new IOException("Stream closed");  
  45.     }  
  46.   
  47.     // Factories for java.io.OutputStreamWriter  
  48.     public static StreamEncoder forOutputStreamWriter(OutputStream out,  
  49.                                                       Object lock,  
  50.                                                       String charsetName)  
  51.         throws UnsupportedEncodingException  
  52.     {  
  53.         String csn = charsetName;  
  54.         if (csn == )  
  55.             csn = Charset.defaultCharset().name();  
  56.         try {  
  57.             if (Charset.isSupported(csn))  
  58.                 return new StreamEncoder(out, lock, Charset.forName(csn));  
  59.         } catch (IllegalCharsetNameException x) { }  
  60.         throw new UnsupportedEncodingException (csn);  
  61.     }  
  62.   
  63.     public static StreamEncoder forOutputStreamWriter(OutputStream out,  
  64.                                                       Object lock,  
  65.                                                       Charset cs)  
  66.     {  
  67.         return new StreamEncoder(out, lock, cs);  
  68.     }  
  69.   
  70.     public static StreamEncoder forOutputStreamWriter(OutputStream out,  
  71.                                                       Object lock,  
  72.                                                       CharsetEncoder enc)  
  73.     {  
  74.         return new StreamEncoder(out, lock, enc);  
  75.     }  
  76.   
  77.   
  78.     // Factory for java.nio.channels.Channels.newWriter  
  79.   
  80.     public static StreamEncoder forEncoder(WritableByteChannel ch,  
  81.                                            CharsetEncoder enc,  
  82.                                            int minBufferCap)  
  83.     {  
  84.         return new StreamEncoder(ch, enc, minBufferCap);  
  85.     }  
  86.   
  87.   
  88.     // -- Public methods corresponding to those in OutputStreamWriter --  
  89.   
  90.     // All synchronization and state/argument checking is done in these public  
  91.     // methods; the concrete stream-encoder subclasses defined below need not  
  92.     // do any such checking.  
  93.   
  94.     public String getEncoding() {  
  95.         if (isOpen())  
  96.             return encodingName();  
  97.         return ;  
  98.     }  
  99.   
  100.    public void flushBuffer() throws IOException {  
  101.        synchronized (lock) {  
  102.            if (isOpen())  
  103.                implFlushBuffer();  
  104.            else  
  105.                throw new IOException("Stream closed");  
  106.        }  
  107.    }  
  108.   
  109.    public void write(int c) throws IOException {  
  110.        char cbuf[] = new char[1];  
  111.        cbuf[0] = (char) c;  
  112.        write(cbuf, 0, 1);  
  113.    }  
  114.   
  115.    public void write(char cbuf[], int off, int len) throws IOException {  
  116.        synchronized (lock) {  
  117.            ensureOpen();  
  118.            if ((off < 0) || (off > cbuf.length) || (len < 0) ||  
  119.                ((off + len) > cbuf.length) || ((off + len) < 0)) {  
  120.                throw new IndexOutOfBoundsException();  
  121.            } else if (len == 0) {  
  122.                return;  
  123.            }  
  124.            implWrite(cbuf, off, len);  
  125.        }  
  126.    }  
  127.   
  128.    public void write(String str, int off, int len) throws IOException {  
  129.        /* Check the len before creating a char buffer */  
  130.        if (len < 0)  
  131.            throw new IndexOutOfBoundsException();  
  132.        char cbuf[] = new char[len];  
  133.        str.getChars(off, off + len, cbuf, 0);  
  134.        write(cbuf, 0, len);  
  135.    }  
  136.   
  137.    public void flush() throws IOException {  
  138.        synchronized (lock) {  
  139.            ensureOpen();  
  140.            implFlush();  
  141.        }  
  142.    }  
  143.   
  144.    public void close() throws IOException {  
  145.        synchronized (lock) {  
  146.            if (!isOpen)  
  147.                return;  
  148.            implClose();  
  149.            isOpen = false;  
  150.        }  
  151.    }  
  152.   
  153.    private boolean isOpen() {  
  154.        return isOpen;  
  155.    }  
  156.   
  157.   
  158.    // -- Charset-based stream encoder impl --  
  159.   
  160.    private Charset cs;  
  161.    private CharsetEncoder encoder;  
  162.    private ByteBuffer bb;  
  163.   
  164.    // Exactly one of these is non-null  
  165.    private final OutputStream out;  
  166.    private WritableByteChannel ch;  
  167.   
  168.    // Leftover first char in a surrogate pair  
  169.    private boolean haveLeftoverChar = false;  
  170.    private char leftoverChar;  
  171.    private CharBuffer lcb = ;  
  172.   
  173.    private StreamEncoder(OutputStream out, Object lock, Charset cs) {  
  174.        this(out, lock,  
  175.         cs.newEncoder()  
  176.         .onMalformedInput(CodingErrorAction.REPLACE)  
  177.         .onUnmappableCharacter(CodingErrorAction.REPLACE));  
  178.    }  
  179.   
  180.    private StreamEncoder(OutputStream out, Object lock, CharsetEncoder enc) {  
  181.        super(lock);  
  182.        this.out = out;  
  183.        this.ch = ;  
  184.        this.cs = enc.charset();  
  185.        this.encoder = enc;  
  186.   
  187.        // This path disabled until direct buffers are faster  
  188.        if (false && out instanceof FileOutputStream) {  
  189.                ch = ((FileOutputStream)out).getChannel();  
  190.        if (ch != )  
  191.                    bb = ByteBuffer.allocateDirect(DEFAULT_BYTE_BUFFER_SIZE);  
  192.        }  
  193.            if (ch == ) {  
  194.        bb = ByteBuffer.allocate(DEFAULT_BYTE_BUFFER_SIZE);  
  195.        }  
  196.    }  
  197.   
  198.    private StreamEncoder(WritableByteChannel ch, CharsetEncoder enc, int mbc) {  
  199.        this.out = ;  
  200.        this.ch = ch;  
  201.        this.cs = enc.charset();  
  202.        this.encoder = enc;  
  203.        this.bb = ByteBuffer.allocate(mbc < 0  
  204.                                  ? DEFAULT_BYTE_BUFFER_SIZE  
  205.                                  : mbc);  
  206.    }  
  207.   
  208.    private void writeBytes() throws IOException {  
  209.        bb.flip();  
  210.        int lim = bb.limit();  
  211.        int pos = bb.position();  
  212.        assert (pos <= lim);  
  213.        int rem = (pos <= lim ? lim - pos : 0);  
  214.   
  215.            if (rem > 0) {  
  216.        if (ch != ) {  
  217.            if (ch.write(bb) != rem)  
  218.                assert false : rem;  
  219.        } else {  
  220.            out.write(bb.array(), bb.arrayOffset() + pos, rem);  
  221.        }  
  222.        }  
  223.        bb.clear();  
  224.        }  
  225.   
  226.    private void flushLeftoverChar(CharBuffer cb, boolean endOfInput)  
  227.        throws IOException  
  228.    {  
  229.        if (!haveLeftoverChar && !endOfInput)  
  230.            return;  
  231.        if (lcb == )  
  232.            lcb = CharBuffer.allocate(2);  
  233.        else  
  234.            lcb.clear();  
  235.        if (haveLeftoverChar)  
  236.            lcb.put(leftoverChar);  
  237.        if ((cb != ) && cb.hasRemaining())  
  238.            lcb.put(cb.get());  
  239.        lcb.flip();  
  240.        while (lcb.hasRemaining() || endOfInput) {  
  241.            CoderResult cr = encoder.encode(lcb, bb, endOfInput);  
  242.            if (cr.isUnderflow()) {  
  243.                if (lcb.hasRemaining()) {  
  244.                    leftoverChar = lcb.get();  
  245.                    if (cb !=  && cb.hasRemaining())  
  246.                        flushLeftoverChar(cb, endOfInput);  
  247.                    return;  
  248.                }  
  249.                break;  
  250.            }  
  251.            if (cr.isOverflow()) {  
  252.                assert bb.position() > 0;  
  253.                writeBytes();  
  254.                continue;  
  255.            }  
  256.            cr.throwException();  
  257.        }  
  258.        haveLeftoverChar = false;  
  259.    }  
  260.   
  261.    void implWrite(char cbuf[], int off, int len)  
  262.        throws IOException  
  263.    {  
  264.        CharBuffer cb = CharBuffer.wrap(cbuf, off, len);  
  265.   
  266.        if (haveLeftoverChar)  
  267.        flushLeftoverChar(cb, false);  
  268.   
  269.        while (cb.hasRemaining()) {  
  270.        CoderResult cr = encoder.encode(cb, bb, false);  
  271.        if (cr.isUnderflow()) {  
  272.           assert (cb.remaining() <= 1) : cb.remaining();  
  273.           if (cb.remaining() == 1) {  
  274.                haveLeftoverChar = true;  
  275.                leftoverChar = cb.get();  
  276.            }  
  277.            break;  
  278.        }  
  279.        if (cr.isOverflow()) {  
  280.            assert bb.position() > 0;  
  281.            writeBytes();  
  282.            continue;  
  283.        }  
  284.        cr.throwException();  
  285.        }  
  286.    }  
  287.   
  288.    void implFlushBuffer() throws IOException {  
  289.        if (bb.position() > 0)  
  290.        writeBytes();  
  291.    }  
  292.   
  293.    void implFlush() throws IOException {  
  294.        implFlushBuffer();  
  295.        if (out != )  
  296.        out.flush();  
  297.    }  
  298.   
  299.    void implClose() throws IOException {  
  300.        flushLeftoverChar(, true);  
  301.        try {  
  302.            for (;;) {  
  303.                CoderResult cr = encoder.flush(bb);  
  304.                if (cr.isUnderflow())  
  305.                    break;  
  306.                if (cr.isOverflow()) {  
  307.                    assert bb.position() > 0;  
  308.                    writeBytes();  
  309.                    continue;  
  310.                }  
  311.                cr.throwException();  
  312.            }  
  313.   
  314.            if (bb.position() > 0)  
  315.                writeBytes();  
  316.            if (ch != )  
  317.                ch.close();  
  318.            else  
  319.                out.close();  
  320.        } catch (IOException x) {  
  321.            encoder.reset();  
  322.            throw x;  
  323.        }  
  324.    }  
  325.   
  326.    String encodingName() {  
  327.        return ((cs instanceof HistoricallyNamedCharset)  
  328.            ? ((HistoricallyNamedCharset)cs).historicalName()  
  329.            : cs.name());  
  330.    }  
 

更多源码查看http://www.docjar.com/projects/Open-JDK-6.b17-src-code.html 

2. Writer类的flush方法

该类是一个抽象类,声明如下:

[java]  view plain  copy
 print ?
  1. public abstract class Writer implements Appendable, Closeable, Flushable   
 

Writer类的flush()方法是一个抽象方法,其子类一般都实现了该方法。所以,一般使用字符流之后,调用一下flush()或者close()方法。

[java]  view plain  copy
 print ?
  1. abstract public void flush() throws IOException;  
 

细节请看jdk的api,或者Java的源码以及上面的StreamEncoder类源码。

ok,说到这里吧,这里主要借助Java的IO中字节流与字符流的flush()方法,来说明学Java看源码和思考是很重要的。

总之,不管你使用哪种流(字符、字节、具有缓冲的流)技术,不妨调用一下flush()/close()方法,防止数据无法写到输出流中。

基于STM32设计的个人健康检测仪(华为云IOT)(191) 本系统采用华为云物联网平台实现数据云端存储与分析,并通过自研手机APP提供远程监控界面,让用户无论身处何地都能及时掌握自身的健康数据,为用户提供个性化的健康管理方案,同时也为医疗机构提供了便捷的数据获取途径,助力实现智能化、精细化的医疗服务。 阅读详情

相关推荐

别再死记硬背了!用Python可视化带你直观理解柯西收敛定理(附NumPy代码)

本文通过Python可视化技术,结合NumPy和Matplotlib,直观展示柯西收敛定理的动态过程。文章提供了完整的代码实现,帮助读者从抽象数学定义过渡到具象理解,特别适合数学学习者和Python开发者。通过热力图和交互式参数探索,读者可以清晰观察数列收敛特性,提升数学分析的学习效率。

weixin_28465009的博客 186

Java IO:IO流中的flush方法

Java设计Io流可谓是煞费苦心,如果你是初学者我敢保证第一次接触Java的IO类,一定会“狂晕!!”,晕,倒不是因为它有多么难学,而是太多,而且及其让人容易迷惑。在编程日子中,尤其是在网络编程中,几乎离不开Java的IO,关于Java的IO流的分类,可以到网上soso,今天跟大家分享一下flush方法。 1. OutputStream类的flush方法 该类实现了Flushable接口,所以...

mmdev 2493

TI电机驱动应用中MOSFET选型完整指南

深入解析TI电机驱动设计中MOSFET的选型关键,涵盖参数匹配、热性能与开关效率,帮助工程师优化系统性能并提升能效,是掌握MOSFET应用的核心参考。

weixin_42263617的博客 1271

内存流——​ByteArrayOutputStream,ByteArrayInputStream,CharArrayReader,CharArrayWriter

1、 什么是内存流 ​ 当输出流的目的,和输入流的源是内存时,这样的流称之为内存流。 ​ ByteArrayOutputStream:内存流的输出流 ​ ByteArrayInputStream:内存流的输入流,它是唯一一种能够直接从网络上获取二进制数据的流 ​ CharArrayReader:内存流中的输入流 ​ CharArrayWriter:内存流中的输出流 ​ ByteArr...

诗人密语 918

DCA1000EVM数据采集实战:从mmWave Studio配置到MATLAB后处理的全链路解析

本文详细解析了DCA1000EVM数据采集的全流程,从mmWave Studio配置到MATLAB后处理,涵盖数据存储结构解析、后处理引擎剖析及Python数据处理方案。通过实战案例,帮助开发者高效处理毫米波雷达原始数据,实现从数据到应用价值的转化,提升开发效率。

weixin_33743661的博客 710

矩阵管理:一人100账号霸屏小红书,保姆级教程经验技巧

同时,如果你的账号表现很正常,很OK,它也增加账号权重。手机环境:一机一卡一号是基本操作,如果你觉得设备成本高,你就要知道WIN的云真机,一键新机,一键随机设备参数,一键还原,一键安装应用,自带批量发布笔记,私信聚合,自带回复私信,一键养号等等,一人批量注册100个小红书账号真的很简单!从流量逻辑来分析,大家有没有发现,从账号粉丝数来看,小红书很难出现类似抖音上超千万粉丝量级的账号,几十万粉丝的博主已经是头部账号了,原因在于,抖音的流量分发机制是80%的流量集中在 20% 的头部账号而。

FDF432DF的博客 5148

(JavaSE 学习记录) IO流之字节数组流 ByteArrayInputStream、ByteArrayOutputStream

字节数组流 FileInputStream是把File文件当做数据源,而ByteArrayInputStream则是把内存中的”某个字节数组对象”作为源。 常常用在需要流和数组之间转化的情况。 不需要关闭流的操作。 ByteArrayInputStream import java.io.ByteArrayInputStream; import java.io.IOException; public class ByteArrayInputStreamTest { public static voi

Sagittarius_FV的博客 649

Nexus3国内高速下载指南:多版本全平台资源汇总

本文针对国内开发者从官网下载Nexus 3速度慢、易失败的问题,提供了详尽的解决方案。汇总了Windows、Linux、macOS等多个平台的Nexus 3历史及最新版本(如3.31.1)的国内高速下载链接,并附有版本选择建议与Linux环境下的快速启动指南,帮助用户高效获取和部署这一流行的仓库管理工具。

jwt8token的博客 433

java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)

前面学习ByteArrayInputStream,了解了“输入流”。接下来,我们学习与ByteArrayInputStream相对应的输出流,即ByteArrayOutputStream。 本章,我们会先对ByteArrayOutputStream进行介绍,在了解了它的源码之后,再通过示例来掌握如何使用它。 转载请注明出处:http://www.cnblogs.com/skywang12345/...

ai_ni_de_ren_lin的博客 824

从流量到凭证:实战解析SMB协议中的NTLMv2/v1哈希提取与破解

本文详细解析了SMB协议中NTLMv2/v1哈希的提取与破解实战技巧。从流量捕获、哈希格式处理到Hashcat高效破解,提供了一套完整的操作指南。文章特别强调了NTLMv2和NTLMv1哈希的区别及处理要点,并分享了防护建议与检测方法,帮助安全人员提升渗透测试效率。

weixin_30642561的博客 118

RK3588 启动卡死

kernel的设备树默认启动了hdmi0,我们的板子没有使用到hdmi0,因此在uboot阶段会卡住。uboot阶段会卡在hdptx_rpoll_cmn_config函数这里。最近再调试公司一个新板子,rk3588芯片,硬件自己设计。2、单PMIC和双PMIC配置,卡在更新处。3、emmc卡死,怀疑。1、hdmi0 卡死。

xiaoning132的专栏 5969

FileOutputStream的flush()方法

flush() 是清空的意思。 一般主要用在IO中,即清空缓冲区数据,就是说你用读写流的时候,其实数据是先被读到了内存中,然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了 close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush(),先清空数据。  fos.flush();可不是摆

llkoio的专栏 2万+

Unreal5从入门到精通之一文搞懂Unreal的C++代码编译之谜

我们在开发Unreal项目时,如果时蓝图模板的项目,一般问题不大,因为当你修改完蓝图,点击编译Compile+保存Save,就可以继续开发了。这对于开发者来说也非常友好。但是,如果你使用的C++模板开发项目,代码编译一切都变得魔幻起来,IDE(VS/Rider)里面有编译,编辑器里面也有编译,有什么区别呢?我们来列举几个新手常碰到的问题。1.代码我明明新建了,编辑器里怎么看不到?2.昨天我新家的功能运行的好好的,今天怎么感觉还是老逻辑。或者昨天加的新代码,新蓝图不见了。

TxNet 1607

java io flush_《文件传输基础——Java IO流》,对其中flush方法的思考

在学习了《文件传输基础——Java IO流》 课程后,发现自己对flush()方法的调用有很多疑惑。在查询资料和自己看源码以及动手试验之后发现有以下几个特点。如有误也请大家指正出来,一切为了java,谢谢~FileInputStream的 flush()是继承于其父类OutputStream的,但是OutputStream类的flush()什么都没做。当OutputStream是BufferedO...

weixin_34802266的博客 490

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java基础:IO 流中的 flush 作者:verycool

Java设计Io流可谓是煞费苦心,如果你是初学者我敢保证第一次接触Java的IO类,一定会“狂晕!!”,晕,倒不是因为它有多么难学,而是太多,而且及其让人容易迷惑。在编程日子中,尤其是在网络编程中,几乎离不开Java的IO,关于Java的IO流的分类,可以到网上soso,今天跟大家分享一下flush方法。 1.  OutputStream类的flush方法 该类实现了Flushable接口,所

逝秋的专栏 1015

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

30天学会Java-14:IO流(一)

Java IO流是程序与外部设备交互的重要方式。IO流分为输入流和输出流,按数据类型可分为字节流(处理所有数据)和字符流(专用于文本)。字节流的基类是InputStream和OutputStream,提供读取和写入字节的基本方法。文件字节流FileInputStream和FileOutputStream分别用于文件的读写,支持覆盖或追加模式。推荐使用try-with-resources自动管理流资源。

smileKH的博客 839

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

20:File类与IO流-----IO字符流

一:字符输入流: java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中,它定义了字符输入流的基本共性功能方法。 public void close();关闭此流并释放与此流相关联的任何系统资源。 pyblic int read();从输入流读取一个字符。 public int read(char[] cbuf);从输入流读取一些字符,并将它们存储到字符数组...

Hhytyq的博客 222
上一篇: java.io.File中mkdir()和mkdirs()的区别
下一篇: Java根据模板创建excel文件
ole_triangle_java
博客等级 码龄10年 82粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值