实习笔记(2015-11-26)
2015-11-26 22:59
197 查看
这几天接手了同事的一个爬虫程序,需求是改成多线程,由于目标网站比较坑爹,有108种让你爬不下去的方法,所以虽然单线程他已经写完了,到我这种对java多线程丝毫无研究的小白手里,着实搞了几天也没搞定,这里先列出一些用到的对我来说新的知识点,有时间深入学习一下。(由于整个程序通过Maven建立项目,java为开发语言,1.8jre,通过hibernate连接数据库。由于本人编程新手,如下内容有错敬请指出纠正,谢谢)
1.Java解析Json利器——Gson
还记得前段时间用C#的CsQuery做爬虫的时候也解析过Json,用的好像是Json.net。Json这个数据格式是非常不错的,所以到了Java项目理所应当需要解析Json。这里的Json是N个ip代理,由于爬的网站封ip嘛...所以问了下同事有没有现成的方法,就找到了Google的Gson包。
怎么说,这个包里的序列与反序列Json的方法特NB,只要建一个类,然后创建一个Gson的对象,一句语句就能实现了。
Json->Class
Gson gson = new Gson();
List<Person> list = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType);
这里我的理解就是:我们会拿到一个String字符串,格式为Json,然后想提取里面的某些数据,那就先创建一个类(Person),然后用Gson的反序列化为一个List,List中的每一个元素都是一个对象。
Class->Json
Person p = new Person();
p.setName("Zhou");
p.setAge(21);
String str = gson.toJson(p);
懂了之前的反序列化,那Json的序列化也就是逆向操作而已。。
暂时对Gson的了解先到这里...
2.HashMap简单的操作
由于经常处理 key,value这种类型的数据,那么array、list感觉有点难办,所以这里用到的是类似于Python中的Dictionary——HashMap(刚查了下..Java里好像也有Dictionary)
这边由于经常需要查找HashMap中的值,遍历之类的操作就必不可少了。网上遍历一般用Iterator(迭代器)来做,但也许用Java1.8中的Stream 来并发是否更快呢?找个时间试试~
HashMap map = new HashMap();
Iterator ite = map.entrySet.iterator();
while(ite.hasNext())
{
HashMap.entry entry = (HashMap.entry)ite.next();
Object key = entry.getKey();
Object value = entry.getValue();
}
这...我觉得好像不简单。把HashMap转为Iterator,然后遍历Iterator,再将Iterator中的每一个元素转成HashMap来输出...类型还是Object的,有点麻烦,是否能直接遍历HashMap呢?现在好像还没有发现...
当然HashMap的一些其他赋值啊(map.put(key, value)),通过key找value啊(map.get(key)),我这边就不多说了。但通过value找key好像只能遍历...
3.Java的Queue操作
队列嘛...在学数据结构的时候还是了解过的,当时好像用C++写作业的时候用到过...先进先出的属性就不多说了,直接写一些基本操作
在Java.util.Queue中,由于LinkedList类实现了Queue的接口,所以我们可以把LinkedList当Queue用
Queue<String> queue = new LinkedList<String>();
我这边也只了解了一点Queue的插入与删除操作。好像它有好几种插入与删除的方法,作用都不同。一般好像用offer()插入,poll()返回并删除元素,这两种方法失败会返回null。还有就是add()与remove()了,这两种网上说是错误会抛出异常,我还没测试过...
还有好几个新知识没罗列..讲的好像也都是些数据结构...嘛,自己比较菜,慢慢积累吧。先这样吧。Java的多线程、Java Stream、okHttp、Unirest
1.Java解析Json利器——Gson
还记得前段时间用C#的CsQuery做爬虫的时候也解析过Json,用的好像是Json.net。Json这个数据格式是非常不错的,所以到了Java项目理所应当需要解析Json。这里的Json是N个ip代理,由于爬的网站封ip嘛...所以问了下同事有没有现成的方法,就找到了Google的Gson包。
怎么说,这个包里的序列与反序列Json的方法特NB,只要建一个类,然后创建一个Gson的对象,一句语句就能实现了。
Json->Class
Gson gson = new Gson();
List<Person> list = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType);
这里我的理解就是:我们会拿到一个String字符串,格式为Json,然后想提取里面的某些数据,那就先创建一个类(Person),然后用Gson的反序列化为一个List,List中的每一个元素都是一个对象。
Class->Json
Person p = new Person();
p.setName("Zhou");
p.setAge(21);
String str = gson.toJson(p);
懂了之前的反序列化,那Json的序列化也就是逆向操作而已。。
暂时对Gson的了解先到这里...
2.HashMap简单的操作
由于经常处理 key,value这种类型的数据,那么array、list感觉有点难办,所以这里用到的是类似于Python中的Dictionary——HashMap(刚查了下..Java里好像也有Dictionary)
这边由于经常需要查找HashMap中的值,遍历之类的操作就必不可少了。网上遍历一般用Iterator(迭代器)来做,但也许用Java1.8中的Stream 来并发是否更快呢?找个时间试试~
HashMap map = new HashMap();
Iterator ite = map.entrySet.iterator();
while(ite.hasNext())
{
HashMap.entry entry = (HashMap.entry)ite.next();
Object key = entry.getKey();
Object value = entry.getValue();
}
这...我觉得好像不简单。把HashMap转为Iterator,然后遍历Iterator,再将Iterator中的每一个元素转成HashMap来输出...类型还是Object的,有点麻烦,是否能直接遍历HashMap呢?现在好像还没有发现...
当然HashMap的一些其他赋值啊(map.put(key, value)),通过key找value啊(map.get(key)),我这边就不多说了。但通过value找key好像只能遍历...
3.Java的Queue操作
队列嘛...在学数据结构的时候还是了解过的,当时好像用C++写作业的时候用到过...先进先出的属性就不多说了,直接写一些基本操作
在Java.util.Queue中,由于LinkedList类实现了Queue的接口,所以我们可以把LinkedList当Queue用
Queue<String> queue = new LinkedList<String>();
我这边也只了解了一点Queue的插入与删除操作。好像它有好几种插入与删除的方法,作用都不同。一般好像用offer()插入,poll()返回并删除元素,这两种方法失败会返回null。还有就是add()与remove()了,这两种网上说是错误会抛出异常,我还没测试过...
还有好几个新知识没罗列..讲的好像也都是些数据结构...嘛,自己比较菜,慢慢积累吧。先这样吧。Java的多线程、Java Stream、okHttp、Unirest
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统