java的stream让我灵光一现
说实话,我是一个到了退役也没有搞明白C++
的istream
和ostream
的。
刚开始的时候我把<iostream>
直接拆解成ios
和tream
真,果粉暴露
退役之后划水,倒是从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
就行了。
所以你秃顶了没?