夢幻之旅
DEBUG - 天道酬勤
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
::
671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
<
2011年9月
>
日
一
二
三
四
五
六
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
公告
本博客中未注原創的文章均為轉載,對轉載內容可能做了些修改和增加圖片注釋,如果侵犯了您的版權,或沒有注明原作者,請諒解
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(21)
給我留言
查看公開留言
查看私人留言
隨筆分類
(644)
Android(10)
(rss)
ANT(4)
(rss)
C#(10)
(rss)
C/C++(16)
(rss)
CSS(3)
(rss)
DataBase(119)
(rss)
DB-DailyMmaintenance(16)
(rss)
Design Patterns(27)
(rss)
english
(rss)
Exceptions(7)
(rss)
EXT(39)
(rss)
FLASH(9)
(rss)
Hardware(20)
(rss)
Hibernate(13)
(rss)
Html(23)
(rss)
Java(143)
(rss)
java Net(10)
(rss)
JavaScript(39)
(rss)
Linux(26)
(rss)
php(5)
(rss)
Regular Exp(3)
(rss)
Spring(17)
(rss)
Struts(12)
(rss)
TOOL(43)
(rss)
VB/VBA/VBS(5)
(rss)
webservice(9)
(rss)
XML(2)
(rss)
我的夢幻旅途(14)
(rss)
隨筆檔案
(669)
2017年9月 (4)
2016年10月 (1)
2015年6月 (1)
2015年4月 (2)
2015年1月 (1)
2014年8月 (2)
2014年7月 (9)
2014年6月 (1)
2014年5月 (2)
2014年4月 (3)
2014年3月 (3)
2013年10月 (4)
2013年9月 (8)
2013年8月 (4)
2013年6月 (3)
2013年5月 (4)
2013年4月 (7)
2013年3月 (1)
2013年1月 (3)
2012年12月 (4)
2012年11月 (1)
2012年10月 (1)
2012年9月 (4)
2012年8月 (1)
2012年7月 (2)
2012年6月 (1)
2012年5月 (4)
2012年4月 (2)
2012年3月 (1)
2012年2月 (4)
2012年1月 (6)
2011年12月 (10)
2011年11月 (7)
2011年10月 (6)
2011年9月 (37)
2011年8月 (34)
2011年7月 (44)
2011年6月 (10)
2011年5月 (5)
2011年4月 (3)
2011年3月 (1)
2011年2月 (1)
2011年1月 (18)
2010年12月 (9)
2010年11月 (13)
2010年10月 (17)
2010年9月 (2)
2010年8月 (10)
2010年7月 (10)
2010年6月 (5)
2010年5月 (8)
2010年4月 (9)
2010年3月 (11)
2010年2月 (3)
2010年1月 (8)
2009年12月 (6)
2009年11月 (10)
2009年10月 (5)
2009年9月 (1)
2009年8月 (18)
2009年7月 (6)
2009年6月 (2)
2009年5月 (1)
2009年4月 (4)
2009年3月 (6)
2009年2月 (5)
2009年1月 (3)
2008年12月 (13)
2008年11月 (13)
2008年10月 (30)
2008年9月 (9)
2008年8月 (24)
2008年7月 (17)
2008年6月 (15)
2008年5月 (16)
2008年4月 (15)
2008年3月 (19)
2008年2月 (3)
2008年1月 (20)
2007年12月 (24)
2007年11月 (9)
文章檔案
(6)
2008年4月 (1)
2008年3月 (1)
2008年1月 (2)
2007年11月 (2)
最新隨筆
1.?PP代碼生成器(四) 使用解決方案生成代碼
2.? PP代碼生成器(三) 設計freemarker模板, 創建解決方案
3.? PP代碼生成器(二) 解決方案, 生成任務, 輔助設計面板
4.? PP代碼生成器(一) 簡介, 下載, 運行
5.?PP持久層代碼生成器
6.?比較好的博客
7.?系統集成項目管理工程師
8.?軟件公司項目經理崗位職責
9.?聯想筆記本 顯示屏 鍵盤失靈 釋放靜電
10.?eclipse maven
積分與排名
積分 - 959677
排名 - 37
最新評論
1.?re: Myeclipse 快捷鍵大全(絕對全)
crl+向右箭頭(輸入法有問題打不出來)移到下一個參數的位置,然后crl+shift+向右箭頭 選中該位置的參數即可
--紅領巾
2.?re: Log4j基本使用方法
555
--555
3.?re: Myeclipse 快捷鍵大全(絕對全)[未登錄]
很不錯,謝謝
--銀狐
4.?re: Flex 表單
是誰這么無聊~嗚~~~
--HUIKK
5.?re: Spring AfterReturning 異常
具體是什么意思啊
--dingli
閱讀排行榜
1.?Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream(70030)
2.?log4j.properties 使用說明(42082)
3.?Myeclipse 快捷鍵大全(絕對全)(32731)
4.?TNSNAMES.ORA 配置(24396)
5.?oracle 樹狀查詢(21363)
評論排行榜
1.?Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream(53)
2.?JMail 異常: java.lang.NoClassDefFoundError: javax/activation/DataSource(21)
3.?javax.mail.MessagingException: 530 5.7.0 Must issue a STARTTLS command first(14)
4.?java 讀取 excel 2003 或 excel 2007(14)
5.?java.lang.UnsupportedClassVersionError: Bad version number in .class file(8)
(轉)NIO ByteBuffer
在 NIO 庫中,所有數據都是用緩沖區處理的。在讀取數據時,它是直接讀到緩沖區中的。在寫入數據時,它是寫入到緩沖區中的。任何時候訪問 NIO 中的數據,都是將它放到緩沖區中。緩沖區實質上是一個數組。通常它是一個字節數組,但是也可以使用其他種類的數組。但是一個緩沖區不僅僅是一個數組。緩沖區提供了對數據的結構化訪問,而且還可以跟蹤系統的讀
/
寫進程。
buffer其實只是一個美化了的數組。
狀態變量
跟蹤數據的狀態情況使buffer可以自己管理數據資源
position: 其實是指從buffer讀取或寫入buffer的下一個元素位置。比如,已經寫入buffer 3個元素那那么position就是指向第4個位置,即position設置為3(數組從0開始計)。
limit:還有多少數據需要從buffer中取出,或還有多少空間可以放入。postition總是
<=
limit。
capacity: 表示buffer本身底層數組的容量。limit絕不能
>
capacity。
filp():作了兩件事情:
1
.將limit指向現在position的位置
2
.將position設置為0 (limit
=
position;position
=
0
)
這個過程可以使之前buffer寫入數據時改變的狀態變為可以“準備讀取”。因為之前寫到buffer中的數據就是position 到 limit
-
1
兩個位置之間(limit指向最后一個數據的后一個位置)。
clear():
也作了兩件事:
1
. limit
=
capacity
2
.position
=
0
這個過程可以使buffer讀取數據時改變的狀態改變為“清空并準備寫入”。
訪問方法
以下都以bytebuffer為例
get():
前三個get方法是相對讀取。就是相對于位置狀態來讀取數據,并且會改變position位置狀態。
byte
get();
ByteBuffer get(
byte
dst[]);
//
讀取bytebuffer中數據寫入 dst[]
ByteBuffer get(
byte
dst[],
int
offset,
int
length);
該讀取數據是絕對讀取(一個byte),即會忽略limit和position值。并完全繞過了緩沖區的狀態統計方法。
就是說不會改變buffer內部的位置狀態。
byte
get(
int
index);
put();
與get類似 前四個put方法是相對讀取。即受position 以及limit影響,并且會改變 position。
ByteBuffer put(
byte
b );
ByteBuffer put(
byte
src[] );
//
從src[]寫入bytebuffer
ByteBuffer put(
byte
src[],
int
offset,
int
length );
ByteBuffer put( ByteBuffer src );
最后一個是絕對寫入 不會影響position等位置狀態。
ByteBuffer put(
int
index,
byte
b );
除了byte的讀寫還有其他類型的讀寫方法。并且他們都存在相對以及絕對兩類。
操作的典型使用:
view plaincopy to clipboardprint
?
while
(
true
)
{
buffer.clear();
//
準備將數據寫入buffer
int
r
=
fcin.read( buffer );
//
channel讀取外部系統的數據并寫入 buffer
if
(r
==-
1
)
{
break
;
}
buffer.flip();
//
準備將數據讀出buffer
fcout.write( buffer );
//
channel讀取buffer的數據并寫到相應的外部系統
}
while
(
true
)
{
buffer.clear();
//
準備將數據寫入buffer
int
r
=
fcin.read( buffer );
//
channel讀取外部系統的數據并寫入 buffer
if
(r
==-
1
)
{
break
;
}
buffer.flip();
//
準備將數據讀出buffer
fcout.write( buffer );
//
channel讀取buffer的數據并寫到相應的外部系統
}
高級應用
緩存區的分配和包裝
ByteBuffer.allocate(
int
);方法可以分配(創建)一個byte類型的buffer。
ByteBuffer.wrap(
byte
[]);方法可以將一個已有的byte數組包裝出一個新的bytebuffer對象。
后一種方式需要小心處理原來的那個byte數組。因為它可以直接訪問了。
緩沖區的分片
分片就是建立“子緩沖區”。子緩沖區共享父緩沖區的一部分底層數組位置。
在某種意義上,子緩沖區就像原來的緩沖區中的一個窗口。
這樣當改變子緩沖區的內容時,父緩沖區的相應位置也會被改變。
分片操作是根據當前position以及limit的值來確定的。
buffer.position(
3
);
buffer.limit(
7
);
ByteBuffer slice
=
buffer.slice();
只讀緩沖區
asReadOnlyBuffer()方法可以返回一個與原buffer對象一樣的對象,只是新的buffer對象是只讀的。
直接緩沖區
sun的定義:給定一個直接字節緩沖區,Java 虛擬機將盡最大努力直接對它執行本機 I
/
O 操作。也就是說,它會在每一次調用底層操作系統的本機 I
/
O 操作之前(或之后),嘗試避免將緩沖區的內容拷貝到一個中間緩沖區中(或者從一個中間緩沖區中拷貝數據)。
創建directbuffer的方式是用ByteBuffer.allocateDirect(
int
);方法替代ByteBuffer.allocate(
int
);
內存影射文件I
/
O
它讀寫要比其他IO快很多.
他使文件或文件的一部分由內存影射。但是只有操作該部分位置的數據才是以內存方式讀寫的,而不是整個文件讀入內存。(并且他是一個os的底層機制。由os底層異步完成內存與物理磁盤上的數據同步)
影射文件可以通過FileChannel對象的map方法得到。
比如以下就是將一個文件的前1024個字節影射到內存,并創建一個MappedByteBuffer對象返回出來。MappedByteBuffer是ByteBuffer的一個子類。
MappedByteBuffer mbb
=
fc.map( FileChannel.MapMode.READ_WRITE, start, size );
posted on 2011-09-04 19:27
HUIKK
閱讀(2310)
評論(0)
編輯
收藏
所屬分類:
Java
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
PP代碼生成器(四) 使用解決方案生成代碼
PP代碼生成器(三) 設計freemarker模板, 創建解決方案
PP代碼生成器(二) 解決方案, 生成任務, 輔助設計面板
PP代碼生成器(一) 簡介, 下載, 運行
PP持久層代碼生成器
eclipse maven
平衡二叉樹,java實現
數據結構復習
萬能分頁標簽
優化Servlet配置為web.xml瘦身
Powered by:
BlogJava
Copyright © HUIKK
主站蜘蛛池模板:
武川县
|
芮城县
|
本溪
|
扎鲁特旗
|
三门县
|
南部县
|
宜宾县
|
栾川县
|
中西区
|
宁安市
|
长垣县
|
南丰县
|
扎赉特旗
|
德令哈市
|
五台县
|
白水县
|
微山县
|
察哈
|
加查县
|
宁国市
|
育儿
|
广东省
|
泰宁县
|
上思县
|
景东
|
微博
|
濉溪县
|
祁东县
|
怀安县
|
凤庆县
|
阳城县
|
奉新县
|
济阳县
|
龙游县
|
微山县
|
平邑县
|
镇赉县
|
通州区
|
息烽县
|
孝昌县
|
蒙城县
|