IO及泛型

常量池
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
BufferedInputStream 爲另一個輸入流添加一些功能,即緩衝輸入以及支持 mark 和 reset 方法的能力。在創建 BufferedInputStream 時,
會創建一個內部緩衝區數組。在讀取或跳過流中的字節時,可根據需要從包含的輸入流再次填充該內部緩衝區,一次填充多個字節。
mark 操作記錄輸入流中的某個點,reset 操作使得在從包含的輸入流中獲取新字節之前,再次讀取自最後一次 mark 操作後讀取的所有字節。
............................................................................................................................
System.in 是屬於BufferedInputStream類型

System.out是屬於PrintStream類型
System.err也屬於PrintStream類型
.............................................................................................................................
PrintStream 爲其他輸出流添加了功能,使它們能夠方便地打印各種數據值表示形式。它還提供其他兩項功能。與其他輸出流不同,PrintStream
永遠不會拋出 IOException;而是,異常情況僅設置可通過 checkError 方法測試的內部標誌。另外,爲了自動刷新,可以創建一個 PrintStream;
這意味着可在寫入 byte 數組之後自動調用 flush 方法,可調用其中一個 println 方法,或寫入一個換行符或字節 ('/n')。

PrintStream 打印的所有字符都使用平臺的默認字符編碼轉換爲字節。在需要寫入字符而不是寫入字節的情況下,應該使用 PrintWriter 類。
...........................................................................................................................

輸入流:字節流(InputStream)字符流(Reader)
輸出流:字節流(OutputStream)字符流(Writer)
.............................................................................................................................
public class BufferedReaderextends Reader從字符輸入流中讀取文本,緩衝各個字符,從而實現字符、數組和行的高效讀取。

可以指定緩衝區的大小,或者可使用默認的大小。大多數情況下,默認值就足夠大了。
.............................................................................................................................
isFile()
測試此抽象路徑名錶示的文件是否是一個標準文件。如果該文件不是一個目錄,並且滿足其他與系統有關的標準,那麼該文件是標準 文件。
由 Java 應用程序創建的所有非目錄文件一定是標準文件。就是裏面沒有子文件的意思。
.................................................................................................................................
isDirectory()
測試此抽象路徑名錶示的文件是否是一個目錄,就是說,該文件裏還有其他的文件。
當且僅當此抽象路徑名錶示的文件存在且 是一個目錄時,返回 true;否則返回 false
.................................................................................................................................
public class FileWriter extends OutputStreamWriter

用來寫入字符文件的便捷類。此類的構造方法假定默認字符編碼和默認字節緩衝區大小都是可接受的。要自己指定這些值,
可以先在 FileOutputStream 上構造一個 OutputStreamWriter。

文件是否可用或是否可以被創建取決於底層平臺。特別是某些平臺一次只允許一個 FileWriter(或其他文件寫入對象)打開文件進行寫入。
在這種情況下,如果所涉及的文件已經打開,則此類中的構造方法將失敗。

FileWriter 用於寫入字符流。要寫入原始字節流,請考慮使用 FileOutputStream
...................................................................................................................................
//板面,九寨溝,天柱山
話題:愛情,家鄉介紹,大學生活。建校歷史,ACM,學習氛圍,住宿條件軟件學院最好!
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public abstract int read()
                  throws IOException
從輸入流中讀取數據的下一個字節。返回 0 到 255 範圍內的 int 字節值。如果因爲已經到達流末尾而沒有可用的字節,則返回值 -1。
在輸入數據可用、檢測到流末尾或者拋出異常前,此方法一直阻塞。
子類必須提供此方法的一個實現。
.....................................................

兩種基本的流是:輸入流和輸出流;
.................................................................

InputStream方法:
三個基本方法:int read()/int read(byte[])/int read(byte[],int,int)
這三個方法提供對輸入管道數據的存取。簡單讀方法返回一個 int 值,它包含從流裏讀
出的一個字節或者-1,其中後者表明文件結束。其它兩種方法將數據讀入到字節數組中,並
返回所讀的字節數。第三個方法中的兩個int 參數指定了所要填入的數組的子範圍。


其它方法:void close()/int available()/skip(long)/boolean markSupported()/ void mark(int)/ void reset(int)

...........................................................................

OutputStream方法:
OutputStream 方法
l 三個基本的write()方法
l int write()
l int write(byte [])
l int write(byte[], int ,int )
這些方法寫輸出流。和輸入一樣,總是嘗試以實際最大的塊進行寫操作。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

l 其他方法
l void close()
當你完成寫操作後,就關閉輸出流。如果你有一個流所組成的棧,
就關閉棧頂部的流。這個關閉操作會關閉其餘的流。
....................................................................
l void flush()
有時一個輸出流在積累了若干次之後才進行真正的寫操作。
flush()方法允許你強制執行寫操作。
..................................................................
FileInputStream 和FileOutputStream
這些類是結點流,而且正如這個名字所暗示的那樣,它們使用磁盤文件。這些類的構造
函數允許你指定它們所連接的文件。要構造一個FileInputStream,所關聯的文件必須存在而
且是可讀的。如果你要構造一個FileOutputStream 而輸出文件已經存在,則它將被覆蓋。
FileInputStream infile =
new FileInputStream("myfile.dat");
FileOutputStream outfile =
new FileOutputStream("results.dat");
.............................................................
BufferInputStream 和BufferOutputStream
這些是過濾器流,它們可以提高I/O 操作的效率。
..............................................................
DataInputStream 和DataOutputStream
這些過濾器通過流來讀寫 Java 基本類。例如:
DataInputStream 方法
byte readByte()
long readLong()
double readDouble()
DataOutputStream 方法
void writeByte(byte)
void writeLong(long)
void writeDouble(double)
注意 DataInputStream 和DataOutputStream 的方法是成對的。
.......................................................................
PipedInputStream 和PipedOutputStream
管道流用來在線程間進行通信。一個線程的 PipedInputStream 對象從另一個線程的
PipedOutputStream 對象讀取輸入。要使管道流有用,必須有一個輸入方和一個輸出方。


.............................................................................
文件的操作:一個是寫入,一個是讀取。
寫入:
首先創建新文件:
File file=new File("D://TestFile.txt");
file.createNewFile();//當且僅當不存在具有此抽象路徑名指定名稱的文件時,不可分地創建一個新的空文件
....................................................................
然後解析該文件,如果是讀,將其解析成InputStream,如果是寫,將其解析成OutputStream類型的。

但是,也可以用快捷類,FileWriter和FileReader類。應用write和read方法實現
寫和讀。寫完文件時,必須將流關閉。
還可以用FileInputStream


用BufferedInputStream必須用:BufferedInputStream bis=
new BufferedInputStream(in);
其中:in = new FileInputStream("D://TestFile.txt")

將Input改爲Output就是寫入文件了。其實Input和Output是相對的。
爲什麼從文件讀取叫InputStream呢?
我認爲:將文件的數據,讀入到內存,這叫Input
從內存存到文件這叫Output。以內存爲主導地位。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


..............................................................................
Vector支持同步,ArrayList不同步。兩者都是實現List接口。這是兩者唯一的區別。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Hashtable以鍵值存在,也是同步的。實現的是Map
......................................................................................................
List接口,其Vector和ArrayList實現
.....................................................................................................
Set接口調用equals方法,判斷對象是否相等,如果相等,則不插入。
....................................................................................................
Map接口,按鍵值的方法,一一插入及映射。

.........................................................................................................
LinkedList繼承Object、AbstractCollection、AbstractList和AbstractSequentialList,其有堆棧的方法。像
public void addFirst(E e),將指定元素插入此列表的開頭。
................................................................
public void addLast(E e)將指定元素添加到此列表的結尾。
此方法等效於 add(E)。
...............................................................
Integer封裝類和int之間的轉換有的問題:
Map<String, Integer> m = new HashMap<String, Integer>();
 // Initialize frequency table from command line
        for (String a : args) {
            Integer freq = m.get(a);
            m.put(a, (freq == null) ? 1 : freq + 1);//這裏的整型自動轉換爲對象,不影響結果。
        }
.............................................................................................
而用:
for(String a:args){
         Integer freq=m.get(m);
         m.put(a, (freq == null) ? new Integer(1).intValue():(freq+new Integer(1).intValue()));//出現了問題!
         //System.out.println(1+freq);
         //不能加,freq一直爲空。(原因至今還沒用真正的明白)。
        }
...................................................................................................
Map是獨立一體的,與collection沒有直接的關係。其鍵值的唯一性是確實的。
其常用的實現類有HashMap和TreeMapHashMap也用到了哈希碼的算法,以便快速查找一個鍵,
TreeMap則是對鍵按序存放,因此它便有一些擴展的方法,比如firstKey(),lastKey()等,
你還可以從TreeMap中指定一個範圍以取得其子Map。鍵和值的關聯很簡單,
用put(Object key,Object value)方法即可將一個鍵與一個值對象相關聯。
用get(Object key)可得到與此key對象所對應的值對象。
在Map中用一個keySet方法,獲得Map中所用的key值。
..................................................................................................
TreeMap<K,V>基於紅黑樹(Red-Black tree)的 NavigableMap 實現。
該映射根據其鍵的自然順序進行排序,或者根據創建映射時提供的 Comparator 進行排序,
具體取決於使用的構造方法。
...................................................................................................
TreeMap()比較器怎麼定義?
...............................................................................


Set接口也是Collection的一種擴展,其常用具體實現的有:HashSet(非同步的)和TreeSet

 

......................................................................................................
接口Comparable<T>其中T - 可以與此對象進行比較的那些對象的類型
此接口強行對實現它的每個類的對象進行整體排序。這種排序被稱爲類的自然排序,類的 compareTo 方法被
稱爲它的自然比較方法。

實現此接口的對象列表(和數組)可以通過 Collections.sort(和 Arrays.sort)進行自動排序。
實現此接口的對象可以用作有序映射中的鍵或有序集合中的元素,無需指定比較器。
........................................................................................................
接口 Comparator<T> T - 此 Comparator 可以比較的對象類型
強行對某個對象 collection 進行整體排序 的比較函數。可以將 Comparator 傳遞給 sort 方法
(如 Collections.sort 或 Arrays.sort),從而允許在排序順序上實現精確控制。
還可以使用 Comparator 來控制某些數據結構(如有序 set或有序映射)的順序,
或者爲那些沒有自然順序的對象 collection 提供排序
.........................................................................................................
java.util.Arrays
中public static <T> List<T> asList(T... a)
返回一個受指定數組支持的固定大小的列表。(對返回列表的更改會“直接寫”到數組。)
此方法同 Collection.toArray() 一起,充當了基於數組的 API 與基於 collection 的 API 之間的橋樑。
返回的列表是可序列化的,並且實現了 RandomAccess。
此方法還提供了一個創建固定長度的列表的便捷方法,該列表被初始化爲包含多個元素:

     List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
.........................................................................................................

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章