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

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

真,果粉暴露

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

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

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

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

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

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

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

public class xin

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

或者是终端指令上面写

java Main.class

JVM:你礼貌吗?

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

\(\huge{\text{这玩意TM怎么输入???}}\)

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

Scanner scan = new Scanner(System.in)

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

为啥要这样,我也不知道

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

\(\huge{\text{这玩意文件TM怎么输入???}}\)

我靠,怎么办。

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

System.in改成File.in

APJfengc:你礼貌吗???

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

FileInputStream

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

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

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

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

里面的一句话

istream operator

oh,豁然开朗。

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

自动补全~~~

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

所以原来这个就是\(\huge{\text{流}}\)

所以延伸一下,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就行了。

所以你秃顶了没?

最新文章

  1. linux内核分析作业6:分析Linux内核创建一个新进程的过程
  2. JAVA join()方法
  3. SilverLight 控件ListBox中的SelectionChanged事件
  4. Java并发包源码学习之线程池(一)ThreadPoolExecutor源码分析
  5. ASP.NET WebForm中用async/await实现异步出人意料的简单
  6. iOS 使用两个tableview的瀑布流
  7. AR_Demon(使用vuforia平台提供的钥匙跟后台,实现相机拍图片读取模型以及视频的功能)
  8. jq,返回上一页,小记history.back(-1)和history.go(-1)区别
  9. [模板] 快速傅里叶变换/FFT/NTT
  10. [luogu1829][bzoj2154][国家集训队]Crash的数字表格 / JZPTAB【莫比乌斯反演】
  11. 总结查看端口、进程占用情况(lsof、netstat、ps、kill)
  12. java使用elasticsearch进行模糊查询之must使用-项目中实际使用
  13. Fluent UDF【2】:学习途径
  14. IIS中采用ISAPI-Rewrite防盗链
  15. Asp.Net中自以为是的Encode
  16. c++类成员函数重载常量与非常量版本时避免代码重复的一种方法
  17. Phonegap下localStorage使用实践
  18. Vijos 小胖的奇偶
  19. python数据分析基础——pandas Tutorial
  20. 创建工程常量 (OC中的宏定义)

热门文章

  1. 文字轮播与图片轮播?CSS 不在话下
  2. Linux Cgroup v1(中文翻译)(1):Control Group
  3. 看看CabloyJS工作流引擎是如何实现Activiti边界事件的
  4. Koa系框架(egg/cabloy)如何获取微信支付回调请求中的xml参数
  5. 基于BPM的低代码开发平台应具备什么功能
  6. 【图解源码】Zookeeper3.7源码分析,包含服务启动流程源码、网络通信源码、RequestProcessor处理请求源码
  7. node zlib压缩模块了解一下
  8. RPA应用场景-考勤审批
  9. sql-DDL-操作数据库与表
  10. 入行数字IC验证后会做些什么?