Time of Update: 2018-12-05
第五章 NIO5.1我們為什麼需要NIO多線程環境下對共用狀態進行同步訪問,增加了系統調度和切換內容相關的開銷,程式員對這些開銷無法控制。阻塞等待。我們需要一種可以一次輪詢一組用戶端,以尋找那個用戶端需要服務。在NIO中,一個Channel代表一個可以輪詢的I/O目標,Channel能夠註冊一個Selector執行個體。Selector的select可以尋找“在當前一組通道中,哪一個需要服務”。Buffer提供了比Stream抽象更高效和可預測的I/O。Stream抽象好的方面是隱藏了底層緩衝區
Time of Update: 2018-12-05
4.2
Time of Update: 2018-12-05
1.1
Time of Update: 2018-12-05
Time of Update: 2018-12-05
2.2 TCP通訊端2.2.1 TCP用戶端TCP用戶端的步驟1.建立一個Socket執行個體:構造器向指定的遠程主機和連接埠建立一個TCP串連。2. 通過通訊端的輸入輸出資料流(I/O streams)進行通訊:一個Socket串連執行個體包括一個InputStream和一個OutputStream,它們的用法同於其他Java輸入輸出資料流。3. 使用Socket類的close()方法關閉串連。下面是一個用於回顯的TCP用戶端的代碼package
Time of Update: 2018-12-05
轉自:http://blog.csdn.net/ZangXT/archive/2009/05/21/4206672.aspx標題:finally是肯定會執行的!try/catch/finally語句下,finally子句是肯定會執行的。但是很多人做不同的測試,卻得出了不同的結論。具體的原理最好是去看《深入java虛擬機器》,裡面對jsr、ret等幾個指令做了詳細的說明。這裡不深入分析,而僅僅是從表現形式上看一下finally的特徵。代碼:/* * author: Zang
Time of Update: 2018-12-05
3.5.3.3 基於文本編解碼和UDP通訊端用戶端package com.suifeng.tcpip.chapter3.vote;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.util.Arrays;/** * UDP 用戶端 * * @author Suifeng *
Time of Update: 2018-12-05
2.3 UDP通訊端UDP協議提供了一種不同於TCP協議的端對端服務,實際上UDP只實現了兩個功能:1)、 在IP協議的基礎上添加了另一層地址(連接埠)2)、對資料轉送過程中可能產生的錯誤進行了檢測,並拋棄了已損壞的資料。UDP通訊端與TCP通訊端的不同點:1. UDP協議在使用前不需要進行串連。2. UDP協議儲存邊界資訊。2.3.1
Time of Update: 2018-12-05
1. Error與Exception的區別2. Exception與RuntimeException的區別3. try{..}catch(..){..}finally{..}執行順序 public class X { public static void main(String[] args) { // Error與Exception有共同的父類Throwable //
Time of Update: 2018-12-05
4.4 控制預設的行為4.4.1 Keep-alive如果一段時間內沒有資料交換,通訊的每個終端可能都會懷疑對方是否還處於活躍狀態。TCP協議提供了一種keep-alive的機制,該機制在經過一段不啟用時間後,將向另一個終端發送一個探測訊息。如果另一個終端還出於活躍狀態,它將回複一個確認訊息。如果經過幾次嘗試後依然沒有收到另一終端的確認訊息,則終止發送探測資訊,關閉通訊端,並在下一次嘗試I/O操作時拋出一個異常。注意,應用程式只要在探測資訊失敗時才能察覺到keep-alive機制的工作。4.4.
Time of Update: 2018-12-05
文章目錄 4.1.2 伺服器協議4.1.3 一客戶一線程 第四章 進階4.1 多任務處理迭代伺服器:當一個用戶端向一個已經被其他用戶端佔用的伺服器發送串連請求時,雖然其在串連建立後即可向伺服器端發送資料,伺服器端在處理完已有用戶端的請求前,卻不會對新的用戶端作出響應。並行伺服器:可以單獨處理沒一個串連,且不會產生幹擾。並行伺服器分為兩種:一客戶一線程和線程池。4.1.1
Time of Update: 2018-12-05
2.1 通訊端地址1. 在Java中,地址可以是IP地址也可以是主機名稱。下面是一個Java中地址的例子package com.suifeng.tcpip.chapter2;import java.net.Inet4Address;import java.net.Inet6Address;import java.net.InetAddress;import java.net.NetworkInterface;import java.net.SocketException;import java.
Time of Update: 2018-12-05
當定義一個類時,如果沒有寫任何建構函式,則java編譯器在編譯的時候會自動添加一個預設建構函式。 這個預設建構函式的特點:無參,存取權限與定義類的存取權限一致(即並非一定是public),方法體中有super()(Object類的空構造器)。 如定義:public class A {} 編譯器自動加上建構函式:public A() { super();} 如定義:class B {}預設建構函式為:B() { super();}
Time of Update: 2018-12-05
4.1.4
Time of Update: 2018-12-05
http://www.pcdog.com/edu/java/20/11/w240538.html 序列化對象在Java中主要有兩個目的,一個是鈍化儲存物件,另一個是通過網路傳輸對象。後者是移動或者遠程計算的基礎。前者比較好辦,Object Storage
Time of Update: 2018-12-05
4.1.5 系統管理調度——Executor介面Executor介面(java.util.concurrent包的一部分)就代表了一個根據某種策略來執行Runnable執行個體的對象,其中可能包括了排隊和調度的細節,或如何選擇要執行的任務。Executor介面只定義了一個方法:interface Executor {void execute(Runnable
Time of Update: 2018-12-05
public static void main(String[] args){ try{ FileOutputStream out = new FileOutputStream("d://javaIO/javaObject.txt"); ObjectOutputStream os = new ObjectOutputStream(out); String ss =
Time of Update: 2018-12-05
一、裝飾者模式(decorator)動態地將責任附加到對象上。若要擴充功能,裝飾者提供了比繼承更有彈性的替代方案。(裝飾者可以在所委託被裝飾者的行為之前與/或之後,加上自己的行為,以達到特定的目的) java.io包中的裝飾者 抽象組件有:InputStream; OutputStream; Reader;
Time of Update: 2018-12-05
一、概述ThreadLocal是什麼呢?其實ThreadLocal並非是一個線程的本地實現版本,它並不是一個Thread,而是threadlocalvariable(線程局部變數)。也許把它命名為ThreadLocalVar更加合適。線程局部變數(ThreadLocal)其實際的功用非常簡單,就是為每一個使用該變數的線程都提供一個變數值的副本,是Java中一種較為特殊的線程綁定機制,使每一個線程都可以獨立地改變自己的副本,而不會和其它線程的副本衝突。 從線程的角度看,每個線程都保持一個對其線程局
Time of Update: 2018-12-05
方法的重寫(Overriding)和重載(Overloading)是Java多態性的不同表現。重寫(Overriding)是父類與子類之間多態性的一種表現,而重載(Overloading)是一個類中多態性的一種表現。 如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫