Skip to content

Commit 0f5e241

Browse files
committed
updates book
1 parent e198044 commit 0f5e241

5 files changed

Lines changed: 200 additions & 49 deletions

File tree

SUMMARY.md

Lines changed: 52 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,58 +2,64 @@
22

33
* [序言](README.md)
44
* [第1章 Java开发入门](第1章 Java开发入门/README.md)
5-
* [Java概述](第1章 Java开发入门/Java概述.md)
6-
* [JDK、JRE、JVM的区别与联系](第1章 Java开发入门/JDK、JRE、JVM的区别与联系.md)
5+
* [Java概述](第1章 Java开发入门/Java概述.md)
6+
* [JDK、JRE、JVM的区别与联系](第1章 Java开发入门/JDK、JRE、JVM的区别与联系.md)
7+
8+
----
9+
710
* [第2章 Java编程基础](第2章 Java编程基础/README.md)
8-
* [Java语法基础-1](第2章 Java编程基础/Java语法基础-1.md)
9-
* [Java语法基础-2](第2章 Java编程基础/Java语法基础-2.md)
10-
* [基本数据类型包装类](第2章 Java编程基础/基本数据类型包装类.md)
11-
* [阿里巴巴Java开发手册](第2章 Java编程基础/阿里巴巴Java开发手册.md)
12-
* [详细介绍JAVA和C++区别](第2章 Java编程基础/详细介绍JAVA和C++区别.md)
11+
* [Java语法基础-1](第2章 Java编程基础/Java语法基础-1.md)
12+
* [Java语法基础-2](第2章 Java编程基础/Java语法基础-2.md)
13+
* [基本数据类型包装类](第2章 Java编程基础/基本数据类型包装类.md)
14+
* [阿里巴巴Java开发手册](第2章 Java编程基础/阿里巴巴Java开发手册.md)
15+
* [详细介绍JAVA和C++区别](第2章 Java编程基础/详细介绍JAVA和C++区别.md)
16+
17+
----
18+
1319
* [第3章 面向对象](第3章 面向对象/README.md)
14-
* [面向对象](第3章 面向对象/面向对象.md)
20+
* [面向对象](第3章 面向对象/面向对象.md)
1521
* [第4章 常见对象](第4章 常见对象/README.md)
16-
* [String类](第4章 常见对象/String类.md)
17-
* [正则表达式](第4章 常见对象/正则表达式.md)
18-
* [字符串格式化](第4章 常见对象/字符串格式化.md)
22+
* [String类](第4章 常见对象/String类.md)
23+
* [正则表达式](第4章 常见对象/正则表达式.md)
24+
* [字符串格式化](第4章 常见对象/字符串格式化.md)
1925
* [第5章 多线程](第5章 多线程/README.md)
20-
* [多线程](第5章 多线程/多线程.md)
21-
* [线程池](第5章 多线程/线程池.md)
22-
* [volatile关键字解析](第5章 多线程/volatile关键字解析.md)
23-
* [HandlerThread](第5章 多线程/HandlerThread.md)
24-
* [Callable和Future](第5章 多线程/Callable和Future.md)
25-
* [Java程序死锁问题原理及解决方案](第5章 多线程/Java程序死锁问题原理及解决方案.md)
26-
* [线程锁技术](第5章 多线程/线程锁技术.md)
27-
* [定时器、互斥、同步通信技术](第5章 多线程/定时器、互斥、同步通信技术.md)
28-
* [线程范围内共享数据](第5章 多线程/线程范围内共享数据.md)
29-
* [多个线程之间共享数据的方式探讨](第5章 多线程/多个线程之间共享数据的方式探讨.md)
30-
* [使用JDK5中同步技术的3个面试题](第5章 多线程/使用JDK5中同步技术的3个面试题.md)
31-
* [同步工具类](第5章 多线程/同步工具类.md)
32-
* [原子类](第5章 多线程/原子类.md)
33-
* [集合及concurrent并发包总结](第5章 多线程/集合及concurrent并发包总结.md)
34-
* [JDK8对并发的新支持](第5章 多线程/JDK8对并发的新支持.md)
26+
* [多线程](第5章 多线程/多线程.md)
27+
* [线程池](第5章 多线程/线程池.md)
28+
* [volatile关键字解析](第5章 多线程/volatile关键字解析.md)
29+
* [HandlerThread](第5章 多线程/HandlerThread.md)
30+
* [Callable和Future](第5章 多线程/Callable和Future.md)
31+
* [Java程序死锁问题原理及解决方案](第5章 多线程/Java程序死锁问题原理及解决方案.md)
32+
* [线程锁技术](第5章 多线程/线程锁技术.md)
33+
* [定时器、互斥、同步通信技术](第5章 多线程/定时器、互斥、同步通信技术.md)
34+
* [线程范围内共享数据](第5章 多线程/线程范围内共享数据.md)
35+
* [多个线程之间共享数据的方式探讨](第5章 多线程/多个线程之间共享数据的方式探讨.md)
36+
* [使用JDK5中同步技术的3个面试题](第5章 多线程/使用JDK5中同步技术的3个面试题.md)
37+
* [同步工具类](第5章 多线程/同步工具类.md)
38+
* [原子类](第5章 多线程/原子类.md)
39+
* [集合及concurrent并发包总结](第5章 多线程/集合及concurrent并发包总结.md)
40+
* [JDK8对并发的新支持](第5章 多线程/JDK8对并发的新支持.md)
3541
* [第6章 集合框架](第6章 集合框架/README.md)
36-
* [集合框架](第6章 集合框架/集合框架.md)
37-
* [集合框架工具类](第6章 集合框架/集合框架工具类.md)
42+
* [集合框架](第6章 集合框架/集合框架.md)
43+
* [集合框架工具类](第6章 集合框架/集合框架工具类.md)
3844
* [第7章 IO流](第7章 IO流/README.md)
39-
* [IO流之File类](第7章 IO流/IO流之File类.md)
40-
* [IO流之字节流和字符流](第7章 IO流/IO流之字节流和字符流.md)
41-
* [常用IO流](第7章 IO流/常用IO流.md)
42-
* [NIO](第7章 IO流/NIO.md)
43-
* [AIO](第7章 IO流/AIO.md)
44-
* [NIO和AIO](第7章 IO流/NIO和AIO.md)
45+
* [IO流之File类](第7章 IO流/IO流之File类.md)
46+
* [IO流之字节流和字符流](第7章 IO流/IO流之字节流和字符流.md)
47+
* [常用IO流](第7章 IO流/常用IO流.md)
48+
* [NIO](第7章 IO流/NIO.md)
49+
* [AIO](第7章 IO流/AIO.md)
50+
* [NIO和AIO](第7章 IO流/NIO和AIO.md)
4551
* [第8章 网络编程](第8章 网络编程/README.md)
46-
* [网络编程](第8章 网络编程/网络编程.md)
52+
* [网络编程](第8章 网络编程/网络编程.md)
4753
* [第9章 反射机制](第9章 反射机制/README.md)
48-
* [类加载器](第9章 反射机制/类加载器.md)
49-
* [反射1](第9章 反射机制/反射.md)
50-
* [反射2](第9章 反射机制/Java反射.md)
51-
* [注解1](第9章 反射机制/注解.md)
52-
* [注解2](第9章 反射机制/Java注解.md)
53-
* [依赖注入](第9章 反射机制/依赖注入.md)
54-
* [动态代理1](第9章 反射机制/动态代理.md)
55-
* [动态代理2](第9章 反射机制/Java动态代理.md)
54+
* [类加载器](第9章 反射机制/类加载器.md)
55+
* [反射1](第9章 反射机制/反射.md)
56+
* [反射2](第9章 反射机制/Java反射.md)
57+
* [注解1](第9章 反射机制/注解.md)
58+
* [注解2](第9章 反射机制/Java注解.md)
59+
* [依赖注入](第9章 反射机制/依赖注入.md)
60+
* [动态代理1](第9章 反射机制/动态代理.md)
61+
* [动态代理2](第9章 反射机制/Java动态代理.md)
5662
* [第10章 新特性](第10章 新特性/README.md)
57-
* [JDK新特性](第10章 新特性/JDK新特性.md)
58-
* [你应该更新的Java知识](第10章 新特性/你应该更新的Java知识.md)
59-
* [Google Guava官方教程](第10章 新特性/Google Guava官方教程.md)
63+
* [JDK新特性](第10章 新特性/JDK新特性.md)
64+
* [你应该更新的Java知识](第10章 新特性/你应该更新的Java知识.md)
65+
* [Google Guava官方教程](第10章 新特性/Google Guava官方教程.md)

book.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,8 @@
33
"title" : "Java基础入门",
44
"language": "zh-hans",
55
"author" : "AllenIverson",
6-
"gitbook": "3.2.2"
6+
"gitbook": "3.2.2",
7+
"pdf": {
8+
"fontFamily": "等线"
9+
}
710
}

第8章 网络编程/img/url.png

40 KB
Loading
16 KB
Loading

第8章 网络编程/网络编程.md

Lines changed: 144 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -781,7 +781,7 @@ TCP 协议是面向连接、保证高可靠性(数据无丢失、数据无失序
781781
最常见的服务端:服务器,Tomcat
782782
## **8.2 常见网络结构**
783783
![网络结构](http://img.blog.csdn.net/20150829114738000)
784-
## **8.3 URL&URLConnection**
784+
## **8.3 URL和URI**
785785

786786
### URI:统一资源标识符
787787

@@ -842,4 +842,146 @@ HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和
842842

843843
Socket 接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,用以开发TCP/IP网络上的应用程序。
844844

845-
> 本节原文链接:http://www.jianshu.com/p/1f512687ea19
845+
> 本节原文链接:http://www.jianshu.com/p/1f512687ea19
846+
847+
# 11. URL
848+
849+
URI:统一资源标示符。
850+
851+
URL:统一资源定位符,也就是说根据URL能够定位到网络上的某个资源,它是指向互联网“资源”的指针。
852+
853+
每个URL都是URI,但不一定每个URI都是URL。这是因为URI还包括一个子类,即统一资源名称(URN),它命名资源但不指定如何定位资源。
854+
855+
```java
856+
public class URLDemo
857+
{
858+
public static void main(String[] args) throws MalformedURLException,IOException {
859+
String str_url = "http://192.168.1.100:8080/myweb/1.html?name=lisi";
860+
URL url = new URL(str_url);
861+
System.out.println("getProtocol:" + url.getProtocol());
862+
System.out.println("getHost:" + url.getHost());
863+
System.out.println("getPort:" + url.getPort());
864+
System.out.println("getFile:" + url.getFile());
865+
System.out.println("getPath:" + url.getPath());
866+
System.out.println("getQuery:" + url.getQuery());
867+
InputStream in = url.openStream();//相当于 url.openConnection().getInputStream();
868+
byte[] buf = new byte[1024];
869+
int len = in.read(buf);
870+
String text = new String(buf,0,len);
871+
System.out.println(text);
872+
in.close();
873+
}
874+
}
875+
```
876+
877+
运行结果
878+
879+
![](img/url.png)
880+
881+
之所以运行结果中响应头不见了,只能看到主体数据的原因在于:URLConnection对象已经把响应头
882+
给解析了
883+
884+
# 12. URLConnection
885+
886+
```java
887+
public class URLDemo
888+
{
889+
public static void main(String[] args) throws MalformedURLException,IOException {
890+
String str_url = "http://192.168.1.100:8080/myweb/1.html?name=lisi";
891+
URL url = new URL(str_url);
892+
//获取url对象的Url连接器对象。将连接封装成了对象:
893+
// java中内置的可以解析的具体协议对象+socket。
894+
URLConnection conn = url.openConnection();
895+
System.out.println(conn);
896+
//由于URLConnection对象已经把响应头给解析了,所以,
897+
// 可以通过URLConnection对象获取响应头某属性名对应的属性值。
898+
String value = conn.getHeaderField("Content-Type");
899+
System.out.println(value);
900+
}
901+
}
902+
```
903+
904+
运行结果
905+
906+
![](img/urlconnection.png)
907+
908+
# 13. HttpURLConnection
909+
910+
```java
911+
URL newURL = new URL(url);
912+
URLConnection urlConnection = newURL.openConnection();
913+
urlConnection.setConnectTimeout(mConfig.connTimeOut);
914+
urlConnection.setReadTimeout(mConfig.soTimeOut);
915+
urlConnection.setDoInput(true);
916+
urlConnection.setUseCaches(false);
917+
918+
// HttpsURLConnection
919+
HttpsURLConnection.setDefaultSSLSocketFactory(sslFactory);
920+
HttpsURLConnection.setDefaultHostnameVerifier();
921+
```
922+
### HttpURLConnection常用方法
923+
924+
| 方法声明 | 功能描述 |
925+
| :------------------- | :---------------------- |
926+
| addRequestProperty() | 添加请求属性 |
927+
| setRequestMethod() | 设置请求方式 |
928+
| connect() | 连接网络 |
929+
| disconnect() | 断开连接 |
930+
| setDoOutput() | 设置打开连接对象输出流,把要提交的数据写入流中 |
931+
| setDoInput() | 设置打开连接对象输入流 |
932+
| setConnectTimeout() | 设置连接超时 |
933+
| setReadTimeout() | 设置读取超时 |
934+
| setUseCaches() | 设置是否使用缓存 |
935+
| getResponseCode() | 获取响应码 |
936+
| getOutputStream() | 获取输出流 |
937+
| getInputStream() | 获取输入流 |
938+
| getErrorStream() | 获取错误流 |
939+
| getResponseMessage() | 获取响应信息 |
940+
| getContentLength() | 获取内容长度 |
941+
| getContentEncoding() | 获取内容编码 |
942+
| getContentType() | 获取内容类型 |
943+
| getHeaderFields() | 获取所有的头字段 |
944+
945+
### setRequestProperty和addRequestProperty的区别
946+
947+
setRequestProperty和addRequestProperty的区别就是,setRequestProperty会覆盖已经存在的key的所有values,有清零重新赋值的作用。而addRequestProperty则是在原来key的基础上继续添加其他value。
948+
949+
```java
950+
/**
951+
* Adds the given property to the request header. Existing properties with
952+
* the same name will not be overwritten by this method.
953+
*/
954+
public void addRequestProperty(String field, String newValue) {
955+
...
956+
}
957+
```
958+
959+
### 字节流转换为字符
960+
961+
```java
962+
public class Tools {
963+
public static String getTextFromStream(InputStream is) {
964+
try {
965+
byte[] b = new byte[1024];
966+
int len;
967+
ByteArrayOutputStream bos = new ByteArrayOutputStream();
968+
while ((len = is.read(b)) != -1) {
969+
bos.write(b, 0, len);
970+
}
971+
//把输出流里的内容转换成字节数组
972+
String text = new String(bos.toByteArray());
973+
return text;
974+
} catch (IOException e) {
975+
e.printStackTrace();
976+
}
977+
return null;
978+
}
979+
}
980+
```
981+
982+
# 14. URLEncoder和URLDecoder
983+
984+
```java
985+
URLEncoder.encode();
986+
URLDecoder.decode();
987+
```

0 commit comments

Comments
 (0)