• java的stream让我灵光一现


    说实话,我是一个到了退役也没有搞明白C++istreamostream的。

    刚开始的时候我把直接拆解成iostream

    vYLOld.md.png

    真,果粉暴露

    退役之后划水,倒是从java当中发现了Stream的奥秘。

    说点题外话,很多人喜欢评价一个语言难不难。

    其实这种说法本身就非常的外行。

    语言似乎没有什么难不难之分,一个平常的io或者是其他的基本运算真的也就算是学会这个语言了。

    但是真正考验人的是那些库的使用,或者在python里面叫做模块,java当中的api

    但是又话说回来,如果真的要说一下哪个语言很难的话,我认为这个位置应该让给java

    vYLz0P.png

    作为一位鲁莽的C++人,开始撸Java的代码的时候上来就是

    public class xin
    

    然后文件名是个j.java,当场暴毙。

    或者是终端指令上面写

    java Main.class
    

    JVM:你礼貌吗?

    但是一个令oi人发指的一个问题出现了。

    这玩意TM怎么输入???" role="presentation" style="position: relative;">这玩意TM怎么输入???

    这时候,一个很迷很迷的操作就出现了

    Scanner scan = new Scanner(System.in)

    一个标准输入的Scanner就写好了。。。

    为啥要这样,我也不知道

    当我开始沾沾自喜的时候,java又给我当头一棒

    这玩意文件TM怎么输入???" role="presentation" style="position: relative;">这玩意文件TM怎么输入???

    我靠,怎么办。

    此时,我有一个大胆的想法。

    vYOPfg.png

    System.in改成File.in

    APJfengc:你礼貌吗???

    然后就发现了今天要说的正题。

    FileInputStream

    这个东西是由InputStream这个类继承(就忽略Object类了)过来的,改写了read()

    这时候我就整个懵逼了,InputStream到底是个什么玩意。

    这让我想到了我之前写快读模板的时候的xin_stream,这显然是个盗版玩意儿。。。

    又让我想到了某个人的书上的高精度模板。

    里面的一句话

    istream operator
    

    oh,豁然开朗。

    然而怎么用,在我家的32bit远古电脑的加持下,intellij根本下载不了,所以piao了个gitpod先用着。

    自动补全~~~

    在我的理解里面,InputStream实际上就是JVM和文件或者标准输入建立了一个桥梁,之后我们再去想要输入的的话就直接请求Stream

    所以原来这个就是" role="presentation" style="position: relative;">

    所以延伸一下,FileOutputStream就是输出流了呗。

    好了,你学会了1+1=2了,我们来实战一下。

    所以我们写个爬虫

    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.*;
    public class xin 
    {
        public static void main(String[] args) throws IOException,Exception
        {
            URL url = new URL("");
    
            HttpURLConnection con = (HttpURLConnection)url.openConnection();
    
            final int sec = 1000;
            con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36");
            con.setReadTimeout(sec * 10);
            con.connect();
    
            InputStream is = con.getInputStream();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
            int maxn = 1024 * 10,len = 0;
            byte[] buf = new byte[maxn];
    
            while((len = is.read(buf)) != -1)
            {
                System.out.print(String.format("Get the mem of [ %3d MB ] [ %5d KB ]\n",len / 1024,len));
                baos.write(buf, 0, len);
            }
    
    
            File filename = new File("pic.jpg");
    
            FileOutputStream os = new FileOutputStream(filename);
            os.write(baos.toByteArray());
    
            os.close();
        }
    }
    

    后来渐渐明白了之后,我发现,java的库也就是api是真的丰富。

    加起来比小日子总人数还多。

    里面还有很多很多开发者的api

    如果想要使用再学习个maven就行了。

    所以你秃顶了没?

  • 相关阅读:
    【软件建模与设计】-02-UML图
    Ant Design Vue & Element-ui 中table 合并行功能,以及带分页并合并行
    二、综合——法律法规
    408数据结构算法题目
    永恒之蓝漏洞复现
    java毕业设计简历系统(附源码、数据库)
    WebSocket Day03 : SpringMVC整合WebSocket
    STM32F4 磁链观测器+PLL 无感无刷电机位置驱动
    6.3 Cookie对象操作
    iptables的50条常用命令
  • 原文地址:https://www.cnblogs.com/NP2Z/p/16581896.html