一、集合
不管使用什么语言编程,编程在做的事情(编程的本质)都是一样的,那就是设计算法和数据结构(程序 = 算法 + 数据结构),算法是一个程序的操作步骤(即这个进程在CPU上的计算和执行顺序),数据结构是一个程序的存储方式(即数据在内存中以怎样的形式存放),从物理的角度看,内存中的数据结构只有两种:①连着的,顺序存储结构;②分开的,链式存储结构,但是,从数据元素之间的关系来讲,可分为三种数据结构,①线性表;②树;③图,在Java的util包中,存放了一些基本数据结构类,这就是集合,主要有:
①List:ArrayList(C++里的vector),LinkedList(使用起来和ArrayList一样,区别在于内存上);
②Set:HashSet;(List是有序的、不唯一的,Set是无序的,唯一的,与List正好相反)
③Map:HashMap。(key:value)
另需谈论两个问题:
①迭代器:iterator
一个例子:
// 获取迭代器
Iterator<String> it = sites.iterator(); // sizes是一个ArrayList<String>
②泛型:数据类型参数化
java 中泛型标记符:
- E - Element (在集合中使用,因为集合中存放的是元素)
- T - Type(Java 类)
- K - Key(键)
- V - Value(值)
- N - Number(数值类型)
- ? - 表示不确定的 java 类型
二、IO:根本问题:输出output(内存到外面(硬盘,显示器,网络等等)),这是在写write呢,输入input(外面(硬盘,键盘,网络等等)到内存),这是在读read呢
有三个类是常用的:(网络编程和序列化都是字节流)
①有关于File的类:
FileOutputStream fileOut = new FileOutputStream("文件路径名");
②
序列化:
ObjectOutputStream out = new ObjectOutputStream(fileOut); // File类对象常作为其他对象构造函数的参数
out.writeObject(e);
反序列化:
FileInputStream fileIn = new FileInputStream("文件路径名");
ObjectInputStream in = new ObjectInputStream(fileIn);
e = (类名) in.readObject();
③网络编程:
网络编程中的IO结构经常以这样一种形式存在:
OutputStream outToServer = 连接套接字.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
out.writeUTF("信息");
三、网络编程
这个网络编程是狭义上的网络编程,指基于TCP或者UDP进行的socket网络编程,网络编程不是只有socket,其实Java web就是网络编程的一种,只不过它是基于HTTP而不是socket,socket编程也不只是基于TCP这样的传输层协议,也可以基于其他的协议,比如你可以使用原始套接字,但是TCP确实是用的最多的网络协议。
下面简单介绍一下Java的TCP网络编程:
经典的LinuxTCP网络编程的模式(4 + 2):
Java网络编程(2 + 1):
server端的2:
ServerSocket serverSocket = new ServerSocket(port); // 监听套接字,合socket和bind为一
Socket server = serverSocket.accept(); // 连接套接字,合listen和accept为一
client端的1:
Socket client = new Socket(serverName, port); //客户端套接字,合socket和connect为一
四、多线程
网络编程由于其良好的封装,并不复杂,但是一个符合企业标准的网络服务器绝不可能是单线程的,因为单线程对CPU的利用率太低,因而网络编程总离不开多线程编程,在学习Java的多线程之前,我们先得弄清楚这几个概念,在《对编程的认识》一文中浅谈过:
①串行(网络传输就是串行的)、并行(多个CPU多个进程)、并发(虚拟化的并行,一个CPU多个进程);
②阻塞、非阻塞:这两个概念是针对单个进程而言的,阻塞就是该进程在等,等什么呢?这个就说不准了,至于说它是在CPU上等,还是离开了CPU等,这也是说不准的,一般OS不会让它在CPU上等,因为这是在白白浪费CPU的时间,非阻塞就是该进程也在等,但是它不断轮询;
③同步、异步:这两个概念是针对多个进程而言的,同步指多个进程如同单个进程一样执行,这需要进程间通信,异步就是随机,多线程的最初摸样就是异步的,各个线程各执行各的,谁也不管谁,在优先级控制下,谁先执行谁后执行一切随缘(意思是说看操作系统的具体情况)。
Java的线程如何创建有哪些API,看菜鸟吧:Java 多线程编程 | 菜鸟教程
下面我们着重了解几个Java的服务器模型:(我的整个学习过程分为两个部分,一个是Java web即学习如何开发web系统,目前正在该部分的第一阶段Java SE,第二部分是网络编程即学习如何开发高性能服务器,现在我们先简单了解几个Java的服务器模型)
(待补充)