java学习笔记十二
1.
Java IO
主要分為字節(jié)流(byte stream)
字符流????????? (characterstream)
實(shí)現(xiàn)這兩種流的輸入流與輸出流分別是 InputStream OutputStream
、Reader Write。這四個(gè)類都是抽象類,所以只能被繼承使用。
2.
與文件打交道肯定是要用到輸入和輸出流的,所以Java專門提供了讀取文件數(shù)據(jù)的類FileInputStream,它繼承了InputSteam屬于字節(jié)流
要牢記其中的幾個(gè)重要的方法:
讀取文件的數(shù)據(jù):
有三個(gè)read方法,其中最常用的是
int read(byte[] b,int off, int length)
其中 byte[] 用來(lái)存放文件中的數(shù)據(jù)信息,所以要有byte型數(shù)組;
int off 表示從那個(gè)字節(jié)開(kāi)始讀取數(shù)據(jù);一般都從零開(kāi)始;
int length 表示每次讀取的長(zhǎng)度,長(zhǎng)度不能大于byte數(shù)組的長(zhǎng)度;
另外,字節(jié)是不能被輸出的,String類中提供了構(gòu)造方法:
String (byte[] b, int off, int length ),就是將字節(jié)轉(zhuǎn)換為字符;
看下面的程序:
當(dāng)對(duì)一個(gè)流進(jìn)行操作時(shí),必須要有一下四部:
1.???? 打開(kāi)流
2.???? Boolean類型的語(yǔ)句 判斷流中的信息還有沒(méi)有
3.???? 對(duì)流進(jìn)行讀入或?qū)懗?/p>
4.???? 關(guān)閉流;
packagecom.jianjian.IO;
?
importjava.io.FileInputStream;
importjava.io.IOException;
?
public classFileTest9
{
????? public static void main(String[] args)throws IOException
????? {
?????????? FileInputStream file = new FileInputStream("F:/永建/個(gè)人數(shù)據(jù)/永建.txt");
?????????? byte[] b = new byte[100];
?????????? int length;
?????????? while (-1 != (length =file.read(b,0,100)))
?????????? {
???????????????? String s = newString(b,0,length);
???????????????? System.out.println(s);
?????????? }
?????????? file.close();
????? }
}
這個(gè)程序是很典型的,以后會(huì)用到很多,所以一定要牢記!
?
2.
Java中將集合轉(zhuǎn)換為數(shù)組的方法 :
toArray(new array [length]);
將數(shù)組轉(zhuǎn)換為集合的方法
asList(array) 返回list 列表;
3.
記得以前說(shuō)過(guò)String類型是final類型的是不可變的類型,Java中存在可變的字符串類型 StringBuffer類型
4.
字節(jié)流中的兩個(gè)重要的分支: 節(jié)點(diǎn)流、過(guò)濾流(filterInputStream);
字節(jié)流總是與源頭打交道;
?
5.
輸出流,OutputStream:
可以創(chuàng)建文件,并向文件中追加內(nèi)容(FileOutputStream);
與輸出流反過(guò)來(lái)的是,用戶輸入的是字符串,要轉(zhuǎn)換成字節(jié);String類中同樣提供了方法String.byte(String[] b);
看下面的程序:
創(chuàng)建一個(gè)txt文件并將“helloworld !”寫入文件:輸出流
將文字從內(nèi)部傳到外部;不要混淆!
package com.jianjian.IO;
?
import java.io.FileOutputStream;
import java.io.IOException;
?
public class OutputStream
{
?? public static void main(String[] args)throws IOException
?? {
????? FileOutputStream file = new FileOutputStream("c:/test.txt");//創(chuàng)建一個(gè)新文件
????? String s = "helloworld!!";???
????? byte[] b = s.getBytes();//將字符串轉(zhuǎn)換成字節(jié)
????? file.write(b);//將字節(jié)寫入文件;
????? file.close();//關(guān)閉流;
?????
?? }
}
?
6.
BufferOutputStream: 緩沖區(qū)輸出流
?
計(jì)算機(jī)中的緩沖區(qū)
緩沖器為暫時(shí)置放輸出或輸入資料的內(nèi)存。
緩沖器內(nèi)資料自儲(chǔ)存設(shè)備(如硬盤)來(lái),放置在緩沖器中,須待機(jī)送至CPU或其他運(yùn)算設(shè)備。
緩沖區(qū)(buffer)這個(gè)中文譯意源自當(dāng)計(jì)算機(jī)的高速部件與低速部件通訊時(shí),必須將高速部件的輸出暫存到某處,以保證高速部件與低速部件相吻合. 后來(lái)這個(gè)意思被擴(kuò)展了,成為"臨時(shí)存貯區(qū)"的意思。
?
與緩沖打交道的其實(shí)就是計(jì)算機(jī)的內(nèi)存了,BufferdeOutputStream的作用其實(shí)就是包裝 一個(gè)輸出流類型的對(duì)象,它的構(gòu)造方法是
BufferedOutputStream(OutputSteams)
那么這個(gè)類的作用到底是什么呢?
比如說(shuō)如果像上面那樣,只讓單純的輸出字節(jié),程序每次只能將一個(gè)字節(jié)讀入到文件中去,如果有一百個(gè)字節(jié),就要讀一百次。如果加上緩存包裝,就可以先將字節(jié)存儲(chǔ)在內(nèi)存中,待需要時(shí)一次性傳入到文件或硬盤中,極大的提高了效率!!
看下面的程序:
好處在與大量數(shù)據(jù)交互時(shí)會(huì)得到體現(xiàn)
package com.jianjian.IO;
?
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
?
public class FileTest10
{
?? public static void main(String[] args)throws Exception
?? {
????? FileOutputStream file = new FileOutputStream("c:/jianjian.text");
????? BufferedOutputStream bz = new BufferedOutputStream(file);
????? bz.write("www.jianjian.com".getBytes());
????? bz.close();
?????
?????
?? }
}
?
7.
字節(jié)占八位
Int型占32位
8.
暈了:在輸入流中的read方法返回的竟然是 字符!!!!
public int read();可是方法上明明寫的是一個(gè)整型!! 是這樣的,Java中的字符使用是用整型來(lái)表示的,只取后面的八位package com.jianjian.IO;
?
public class FileTest11
{
?? public static void main(String[] args)
?? {
????? char a ='a';
????? int b = (int)a;
????? System.out.println(b);
?????
?? }
}
打印出 97;
package com.jianjian.IO;
?
public class FileTest11
{
?? public static void main(String[] args)
?? {
????? char a= 'a';
?????
????? System.out.println((int)a);
?????
?? }
}
打印出97
?
package com.jianjian.IO;
?
public class FileTest11
{
?? public static void main(String[] args)
?? {
????? int a = 97;
?????
????? System.out.println((char)a);
?????
?? }
}
?
打印出a;
下面的程序?qū)?huì)非常有用:因?yàn)樗鼤?huì)顯示出各種字符所代表的整型值
package com.jianjian.IO;
?
public class FileTest11
{
?? public static void main(String[] args)
?? {
????? int a= 65;
?????
????? System.out.println((char)a);
?????
?? }
}
?
大寫的A 65;
小寫的a 97;
?
?
9.
下面講 字節(jié)數(shù)組輸出流 ByteArrayIntputSteam 類似于FileIntputStream 它是從字節(jié)數(shù)組中讀取數(shù)據(jù)的;
它的構(gòu)造方法接收一個(gè)字節(jié)型數(shù)組,表示操作的對(duì)象:
/*
?* 將輸入的字節(jié)數(shù)組中的字母,按大小寫的形式,各輸出一遍
?*/
package com.jianjian.IO;
?
import java.io.ByteArrayInputStream;
import java.io.IOException;
?
public class FileeTest12
{
?? public static void main(String[] args)throws IOException
?? {
????? String s = "abcdefg";
????? byte[] b = s.getBytes();
????? ByteArrayInputStream array = new ByteArrayInputStream(b);
????? for(int i = 0 ; i < 2; i++)
????? {
??????? if(i == 0)
??????? {
?????????? for(int j = 0 ;j < s.length(); j ++)
?????????? {
????????????? System.out.println((char)(array.read()));
?????????? }
??????? }
??????? else
??????? {
?????????? for(int k = 0 ; k < s.length(); k ++)
?????????? {
?????????? ?? System.out.println(Character.toUpperCase((char)array.read()));//利用字符包裝類來(lái)將字符變?yōu)榇髮?/span>
?????????????
?????????? }
??????? }
??????? /*
??????? ?* 我們也看到了read方法每執(zhí)行一次都會(huì)指向下一個(gè)字節(jié),要想實(shí)現(xiàn)我們的目標(biāo)必須要將指針重新指向首字節(jié)!
??????? ?* 不指向的話就是返回 -1,轉(zhuǎn)換成字節(jié)后就是?????,開(kāi)發(fā)人員果然很聰明!
??????? ?* reset方法的作用就是使指針指向mark標(biāo)記處,這里沒(méi)有用到mark方法,表示從零開(kāi)始!
??????? ?*/
??????? array.reset();
????? }
????? System.out.println();
?????
????? array.close();
?????
?? }
}
?
10.
當(dāng)然也有所謂的字節(jié)數(shù)組輸出流,即從內(nèi)部將數(shù)據(jù)寫入到字節(jié)數(shù)組當(dāng)中!
ByteArrayOutputStream;
并且字節(jié)數(shù)組輸出流中有一個(gè)方法
writeTo(OutputStream s)即將字節(jié)數(shù)組輸出流中的字節(jié)數(shù)組直接寫入到其他的輸入流中,比如說(shuō)文件輸出流!
package com.jianjian.IO;
?
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
?
public class FileTest13
{
?? public static void main(String[] args)throws IOException
?? {
????? String s = "hello worldwelcome";
????? byte[] b = s.getBytes();
????? ByteArrayOutputStream array = new ByteArrayOutputStream();
????? array.write(b);//到這里就將字節(jié)存儲(chǔ)到字節(jié)數(shù)組輸出流當(dāng)中,再將其拿出來(lái)即可
????? byte[] bb = array.toByteArray();//該方法返回字節(jié)數(shù)組
????? for(int i = 0 ;? i <bb.length; i ++)
????? {
??????? System.out.println((char)bb[i]);
????? }
????? FileOutputStream file = new FileOutputStream("c:/really.txt");
????? array.writeTo(file);//將字節(jié)寫入到文件中;
????? array.close();
????? file.close();
?????
?????
?? }
??
}
?
總結(jié)
以上是生活随笔為你收集整理的java学习笔记十二的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java学习笔记十
- 下一篇: java学习笔记十三