主题一 I/O操做php
» 流的概念html
在面向对象语言中, 数据的输入和输出都是经过数据流来实现的。数据流是一组有顺序、有起点和终点的字符集合。就比如是两个不一样的池子,一个池子中存满了水,而另外一个池子中则没有任何的东西,在这两个水池中安放一个管子,水就能够从一个池子流向另外一个池子了。在从一个池子向另外一个池子输送水的过程当中,水扮演的角色就是数据流。java
[请点击查看更多内容 转自文章]linux
» Stream程序员
stream表明的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,全部的stream(包括Inputstream和Outputstream)都包括两种类型:spring
[请点击查看更多内容 转自博客]编程
» 输入输出流windows
能够读取字节的类就被称为输入流,并且全部的输入流都继承自抽象类InputStream。一个可以将字节流传送出去的类被称为输出流,全部的输出流都继承自抽象类OutputStream。输入流和输出流能够分为字节流类和字符流类。数组
字节流类包括InputStream和OutputStream两个抽象类。其中包含了字节输入和输出全部的方法。真正用来作数据输入和输出处理的是这两个抽象类的各个具体的子类,这些子类能够根据不一样的输入和输出进行处理。服务器
字符流包括Reader和Writer两个抽象类。这些抽象类处理的是Unicode字符流。用来作数据处理的是Reader和Writer的子类。这些子类会根据不一样的输入和输出进行处理。
[请点击查看更多内容 转自文章]
» 字节流和字符流的区别
Reader和Writer要解决的,最主要的问题就是国际化。原先的I/O类库只支持8位的字节流,所以不可能很好地处理16位的Unicode字符流。Unicode是国际化的字符集(更况且Java内置的char就是16位的Unicode字符),这样加了Reader和Writer以后,全部的I/O就都支持Unicode了。此外新类库的性能也比旧的好。可是,Read和Write并非取代InputStream和OutputStream,有时,你还必须同时使用"基于byte的类"和"基于字符的类"。为此,它还提供了两个"适配器(adapter)"类。InputStreamReader负责将InputStream转化成Reader,而OutputStreamWriter则将OutputStream转化成Writer。
[请点击查看更多内容 转自博客]
» Inputstream类和Outputstream类
inputstream类和outputstream类都为抽象类,不能建立对象,能够经过子类来实例化。
[请点击查看更多内容 转自没有盖的盒子的博客]
» 字节输入输出流
InputStream 是字节输入流,也是全部字节输入流的超类,在它的派生类中必需要从新定义字节输入流中所声明的抽象方法。其中有一些方法,如read()方法,是从输入流中来读取一个字节的内容,而且返回类型是整型。
字节输出流OutputStream是全部字节输出流的超类,它是一个抽象类。它的派生类必须从新定义OutputStream中定义的抽象方法。
[请点击查看更多内容 转自博客]
» 字节文件输入、输出流
文件字节输入输出流是FileInputStream和FileOutputStream,这是InputStream和OutputStream的子类。使用这两个类就能够从一个指定的文件中读取或者向某一个文件中写入数据。
[请点击查看更多内容 转自人人网王晓晔的日志]
» 字节缓冲输入、输出流
使用所使用的字节输入流和字节输出流是以字节为单位进行读写操做的,这样一来,就使文件流的效率变的很是低。这时须要使用缓冲输入流(BufferedInputStream)和缓冲输出流(BufferedOutputStream),当输入数据时,将数据存放到一个缓冲区中,当须要对数据进行读写时,就直接去访问缓冲区。当输出数据时,数据不会直接向输出流输出,而是先将数据写入缓冲区,当缓冲区中的数据满时,才会将缓冲区中的数据写入输出流中,这样一来就大大提升了输入和输出操做的效率。
[请点击查看更多内容 转自shazhuzhu1的ITeye博客]
» 字节数据输入、输出流
在流操做中,还有专门针对于java基本数据类型的写入和读取的操做,分别是字节数据输入流java.io.DataInputStream和字节数据输出流java.io.DataOutputStream,使用字节数据流进行基本的写入和读取操做时,能够没必要担忧不一样平台之间数据大小差别的问题,由于java的数据类型占用空间的大小都是有规定的。
[请点击查看更多内容 转自博客]
» 字节对象输入、输出流
字节对象输入、输出流也就是对象序列化,对象序列化就是指将继承了serializable接口的类的实例转化成一个字节序列,而且能够将其存储在永久性存储介质中。在须要的时候能够将其从存储介质中取出并还原成具体的实例来进行使用。Java提供了字节对象输入流java.io.ObjectInputStream和字节对象输出流java.io.ObjectOutputStream来实现这样的操做。类java.io.PrintStream是很是重要的输出流类。表示标准输出并用来在控制台窗口中输出信息的System.out是java.io.PrintStream类型的变量。类java.io.PrintStream具备很是良好的特性:
[请点击查看更多内容 转自博客]
» 文件类
在输入输出处理中,对于文件的读写,须要使用到java.io包中有关于文件处理的类,其中包括有File、FileInputStream、FileOutputStream、RandomAccessFile和FileDescriptor;接口有FilenameFilter.
[请点击查看更多内容 转自文章]
» File 类
学习如何读取和写入数据以前,首先须要了解一个文件操做的工具类File,使用该类便可以处理数据文件也能够处理目录,而且经过该类能够列出File实例所表明的目录下全部的文件名。在处理一个目录以前,首先要作的是建立一个file的实例用于表示该目录,语法以下。
File file = new File(“src”);
在不一样的操做系统中的路径名称的表示也是不一样的,如在windows中,路径名为“c:\Program File\Java”,而在linux中的路径就是“/home/Program File/Java”。这是由于windows中使用的是UNC路径名,以“\\”开始的目录表示上下文环境所在的目录的硬盘根目录,若是没有“\\”做为路径的开始,则表示相对于当前工做目录的路径,而且经过“盘符(C/D/E….):”形式表示硬盘指定。然而在Linux中,并无硬盘驱动器的概念,因此它的路径指定必须以“/”来表示根目录开始的绝对路径,其余的则是相对路径。
[请点击查看更多内容 转自博客笔记]
» 字符流
字符输入输出流是Reader和Writer,Reader类是字符输入流的基类,其中包括有FileReader、BufferedReader等子类。Writer是字符输出流的基类。只用Reader和Writer对流数据的操做是以一个字符的长度为单位进行处理的,也能够进行字符的编码处理。
[请点击查看更多内容 转自文章]
» 字符读、写流
字符流支持Unicode标准字符集,若是进行文本读写,一般在使用Reader和Writer的子类时要从新定义相关的方法。而Reader和Writer只提供了用于字符流处理的接口,而不能生成实例,只能够经过他们的子类对象来处理字符流。
Reader是Java语言中字符输入流全部类的父类,该类是抽象类,不能被实例化。
Writer是Java语言中字符输出流全部类的父类,该类是抽象类,不能被实例化。
可使用Reader和Writer的子类InputStreamReader和OutputStreamWriter来进行字符的处理,也就是以字符为基本单位进行读写操做,而且能够实现字符流和字节流之间的转化字符流操做比字节流操做效率要高。
使用InputStream和OutputStream对象为构造方法的参数建立InputStreamReader和OutputStreamWriter变量能够直接读取文本,而不须要本身再判断字符编码。
[请点击查看更多内容 转自博客]
» 文件读、写字符流
文件读写字符流是FileReader和FileWriter,它们分别继承自InputStreamReader与OutputStreamWriter,并且使用文件输入输出流能够直接指定文件名或者使用File来打开指定的文件。若是须要指定编码的话,就须要使用InputStreamReader和OutputStreamWriter。
Filereader中有两种形式的经常使用构造方法以下:
FileWriter中有四种形式的经常使用构造方法以下:
[请点击查看更多内容 转自博客]
» 字符缓冲读、写流
字符缓冲读写流是BufferedReader和BufferedWriter,它们的默认缓冲区为8192个字符。和字节缓冲读写流相似,读取文件时,须要首先将文件读取到缓冲区,而后使用read()方法从缓冲区读取,若是缓冲区的数据不足,就会再次从文件中读取字符到缓冲区。同理BufferedWriter写入数据时,不会直接将数据写入到目的地,而是写入到缓冲区中。
BufferedReader类中有以下两个构造方法,并支持mark()和reset()方法:
BufferedWriter类中有以下两个构造方法:
[请点击查看更多内容 转自博客]
主题二 多线程
» 线程的概念
线程是实现并发的一种有效的手段,多线程是现当代操做系统开发的发展方向。这就比如一我的在手忙脚乱的时候,总但愿再分身出一个本身,或者是巴不得多长出一只手来,那多出来的“分身”或者是但愿多长出来的手就至关于线程,也就是多线程。
[请点击查看更多内容 转自百度百科]
» 进程的概念
进程就是一个执行的程序任务,多进程的多任务处理特色就是容许计算机同时处理两个或两个以上的程序。线程则是比进程要小的单位,由前面介绍的进程来管理。一个多线程的程序要比多进程的程序须要更少的管理资源。
[请点击查看更多内容 转自百度百科]
» 线程与进程的关系
[请点击查看更多内容 转自博客]
» 开启多线程的优势和缺点
提升界面程序响应速度。经过使用线程,能够将须要大量时间完成的流程在后台启动单独的线程完成,提升前台界面的相应速度。
充分利用系统资源,提升效率。经过在一个程序内部同时执行多个流程,能够充分利用CPU等系统资源,从而最大限度的发挥硬件的性能。
当程序中的线程数量比较多时,系统将花费大量的时间进行线程的切换,这反而会下降程序的执行效率。可是,相对于优点来讲,劣势仍是颇有限的,因此如今的项目开发中,多线程编程技术获得了普遍的应用。
[请点击查看更多内容 转自文章]
» 线程的生命周期
线程是一个动态执行的过程,它也有一个从产生到死亡的过程,这就是所谓的生命周期。一个线程在它的生命周期内有5种状态:
[请点击查看更多内容 转自博客]
» 进程和程序的区别和联系
[请点击查看更多内容 转自博客]
» 线程的优先级和调度
Java的每一个线程都有一个优先级,当有多个线程处于就绪状态时,线程调度程序根据线程的优先级调度线程运行。
[请点击查看更多内容 转自博客]
» 线程状态的转变
一个线程在其生命周期中能够从一种状态改变到另外一种状态
控制线程的启动和结束:
当一个新建的线程调用它的start()方法后即进入就绪状态,处于就绪状态的线程被线程调度程序选中就能够得到CPU时间,进入运行状态,该线程就开始运行run()方法。
控制线程的结束稍微复杂一点。若是线程的run()方法是一个肯定次数的循环,则循环结束后,线程运行就结束了,线程对象即进入死亡状态。若是run()方法是一个不肯定循环,早期的方法是调用线程对象的stop()方法,然而因为该方法可能致使线程死锁,所以从1.1版开始,不推荐使用该方法结束线程。通常是经过设置一个标志变量,在程序中改变标志变量的值实现结束线程。
线程阻塞条件:
处于运行状态的线程除了能够进入死亡状态外,还可能进入就绪状态和阻塞状态。下面分别讨论这两种状况:
处于运行状态的线程若是调用了yield()方法,那么它将放弃CPU时间,使当前正在运行的线程进入就绪状态。
有多种缘由可以使当前运行的线程进入阻塞状态,进入阻塞状态的线程当相应的事件结束或条件知足时进入就绪状态。使线程进入阻塞状态可能有多种缘由:
线程调用了sleep()方法,线程进入睡眠状态。
I/O阻塞。
有时要求当前线程的执行在另外一个线程执行结束后再继续执行,这时能够调用join()方法实现。
线程调用了wait()方法,等待某个条件变量,此时该线程进入阻塞状态。直到被通知(调用了notify()或notifyAll()方法)结束等待后,线程回到就绪状态。
另外若是线程不能得到对象锁,也进入就绪状态。
[请点击查看更多内容 转自博客]
» Java 建立线程的两个方法
Java提供了线程类Thread来建立多线程的程序。其实,建立线程与建立普通的类的对象的操做是同样的,而线程就是Thread类或其子类的实例对象。每一个Thread对象描述了一个单独的线程。要产生一个线程,有两种方法:
[请点击查看更多内容 转自博客]
» Thread 类的方法
currentThread() 返回当前运行的Thread对象。
start() 启动一个线程。
run() 线程体,由start()方法调用,当run()方法返回时,当前的线程结束。
stop() 使调用它的线程当即中止执行。
sleep(int n)使线程睡眠n毫秒,n毫秒后,线程能够再次运行。
suspend() 使线程挂起,暂停运行。
resume() 恢复挂起的线程,使其处于可运行状态(Runnable)。
yield() 将CPU控制权主动移交到下一个可运行线程。
isAlive() 若是线程已被启动而且未被终止,那么isAlive()返回true。若是返回false,则该线程是新建立或是已被终止的。
[请点击查看更多内容 转自百度贴吧]
» sleep与yield的区别
[请点击查看更多内容 转自博客]
» 互斥锁
在Java中,每一个对象都对应于一个能够称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。就像使用旅馆房间,若是房间没有人住,你能够住进去,同时锁上门,这样别人就不会进房间打扰你。一样道理,若是资源如今没有被使用,线程能够获得互斥锁,从而获得线程的使用权。当线程执行完毕后,它放弃互斥锁,就像你离开房间,让门开着等待下一位顾客。若是已经有一个线程已经取得互斥锁,其他的线程就必须等待当前线程放弃互斥锁,这就比如你到房门前时发现门已锁住,你必须等待房间里的人出来,打开门,你才能进入。
[请点击查看更多内容 转自博客]
» 线程同步的特色
[请点击查看更多内容 转自Java编程网]
» 线程的同步
同步是一种保证共享资源完整性的手段,具体做法是在表明原子操做的程序代码前加上synchronized标记,这样的代码被称为同步代码块。
[请点击查看更多内容 转自百度百科]
» 线程通讯
不一样的线程执行不一样的任务,若是这些任务有某种联系,线程之间必须可以通讯,协调完成工做。例如生产者和消费者共同操做堆栈,当堆栈为空时,消费者没法取出产品,应该先通知生产者向堆栈中加入产品。当堆栈已满时,生产者没法继续加入产品,应该先通知消费者从堆栈中取出产品。
java.lang.Object类中提供了两个用于线程通讯的方法:
[请点击查看更多内容 转自博客]
主题三 网络编程技术
» 网络编程
网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据。程序员所做的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴。在发送和接收数据时,大部分的程序设计语言都设计了专门的API实现这些功能,程序员只须要调用便可。
[请点击查看更多内容 转自博客]
» 网络通信方式
在现有的网络中,网络通信的方式主要有两种:
[请点击查看更多内容 转自文章]
» Socket
网络上的两个程序经过一个双向的通信链接实现数据的交换,这个双向链路的一端称为一个Socket。Socket一般用来实现客户方和服务方的链接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号惟一肯定。
[请点击查看更多内容 转自百度百科]
» Socket通信的过程
Server端Listen(监听)某个端口是否有链接请求,Client端向Server 端发出Connect(链接)请求,Server端向Client端发回Accept(接受)消息。一个链接就创建起来了。Server端和Client 端均可以经过Send,Write等方法与对方通讯。
对于一个功能齐全的Socket,都要包含如下基本结构,其工做过程包含如下四个基本的步骤:
[请点击查看更多内容 转自博客]
» ServerSocket
在服务器端使用的是ServerSocket,主要用于接收客户端传来的对象。
可使用下面的语句得到客户端的请求:
Socket linksocket = myserver.accept();
得到链接后进行通讯,而后使用下面的语句关闭服务器监听:
myserver.close();
[请点击查看更多内容 转自文章]
» DatagramPacket
在使用自寻址包以前,你须要首先熟悉DatagramPacket类,地址信息和自寻址包以字节数组的方式同时压缩入这个类建立的对象中
DatagramPacket有数个构造函数,即便这些构造函数的形式不一样,但一般状况下他们都有两个共同的参数:byte [] buffer 和 int length,buffer参数包含了一个对保存自寻址数据包信息的字节数组的引用,length表示字节数组的长度。
最简单的构造函数是DatagramPacket(byte [] buffer, int length),这个构造函数肯定了自寻址数据包 数组和数组的长度,但没有任何自寻址数据包的地址和端口信息,这些信息能够后面经过调用方法setAddress(InetAddress addr)和 setPort(int port)添加上。
[请点击查看更多内容 转自博客]
» URL
URL(Uniform Resource Locator)即统一资源定位符,表示在internet上的某一个具体资源的访问地址。
[请点击查看更多内容 转自百度百科]
» TCP网络程序的工做原理
TCP 客户端程序与TCP服务器程序的交互过程:
[请点击查看更多内容 转自博客]
» UDP
UDP(User Datagram Protocol) 用户数据报协议,用户数据报协议(UDP)是 OSI 参考模型中一种无链接的传输层协议,提供面向事务的简单不可靠信息传送服务。 UDP 协议基本上是 IP 协议与上层协议的接口。 UDP 协议适用端口分别运行在同一台设备上的多个应用程序。
UDP协议有以下的特色:
从以上特色可知,UDP提供的是无链接的、不可靠的数据传送方式,是一种尽力而为的数据交付服务。
[请点击查看更多内容 转自百度百科]
» DatagramSocket类
DatagramSocket自己只是码头,不维护状态,不能产生IO流,它的惟一做用就是接收和发送数据报,Java使用DatagramPacket来表明数据报,DatagramSocket接收和发送的数据都是经过DatagramPacket对象完成的。
[请点击查看更多内容 转自百度空间]
» InetAddress类
InetAddress类在网络API套接字编程中扮演了一个重要角色。参数传递给流套接字类和自寻址套接字类构造器或非构造器方法。InetAddress描述了32位或64位IP地址,要完成这个功能,InetAddress类主要依靠两个支持类Inet4Address 和 Inet6Address,这三个类是继承关系,InetAddrress是父类,Inet4Address 和 Inet6Address是子类。因为InetAddress类只有一个构造函数,并且不能传递参数,因此不能直接建立InetAddress对象。
[请点击查看更多内容 转自博客]