Java 輸入/輸出


   在java語言中,I/O的方式是流的方式。流(stream)這是個學習java輸入輸出的最基本的概念。流是字節從源到目的的有序序列。一方面是字節,一方面是有序的。流描述的是一個過程,順序嚴格。一個需要鍵盤輸入的程序可以用流來做到這一點。兩種基本的流是:輸入流和輸出流。你可以從輸入流讀,但你不能對它寫。要從輸入流讀取字節,必須有一個與這個流相關聯的字符源。這些東西都放在java.io.*這個包裏了。io是java的第一大包。在java.io 包中,有一些流是結點流,即它們可以從一個特定的地方讀寫,例如磁盤或者一塊內存。其他流稱作過濾流。一個過濾器輸入流是用一個到已存在的輸入流的連接創建的。此後,當你試圖從過濾輸入流對象讀時,它向你提供來自另一個輸入流對象的字符。
常見的幾種流:
字節流:傳字節的。以8位字節爲單位進行讀寫,以InputStream與OutputStream爲基礎類
字符流: 傳字符的。以16位字符爲單位進行讀寫,以Reader與Writer爲基礎類
文件流: 傳文件的。屬於節點流,對文件讀寫,傳輸。裏面的類很多。
序列化:傳對象的。一個對象怎麼讀啊,只有變成二進制纔可以讀,這就是序列化。
實踐: //這是一個字節流的例子,以InputStream與OutputStream爲基礎類
import java.io.*;
class ByteArrayOutputStreamDemo {
public static void main(String args[]) throws IOException {
ByteArrayOutputStream f = new ByteArrayOutputStream();
String s = "This should end up in the array";
byte buf[] = s.getBytes();
f.write(buf);
System.out.println("Buffer as a string");
System.out.println(f.toString());
System.out.println("Into array");
byte b[] = f.toByteArray();

for (int i=0; i<b.length; i++) {
System.out.print((char) b[i]);}
System.out.println("/nTo an OutputStream()");
//輸出到文件test.txt中
OutputStream f2 = new FileOutputStream("test.txt");
f.writeTo(f2);
f2.close();
System.out.println("Doing a reset");
f.reset();
for (int i=0; i<3; i++)
f.write('X');
System.out.println(f.toString());}}
//字符流的例子,以Reader與Writer爲基礎類
import java.io.*;
public class CharArrayReaderDemo {
public static void main(String args[]) throws IOException {

String tmp = "abcdefghijklmnopqrstuvwxyz";
int length = tmp.length();
char c[] = new char[length];
tmp.getChars(0, length, c, 0);
CharArrayReader input1 = new CharArrayReader(c);
CharArrayReader input2 = new CharArrayReader(c, 0, 5);

int i;
System.out.println("input1 is:");
while((i = input1.read()) != -1) {
System.out.print((char)i);}
System.out.println();
System.out.println("input2 is:");
while((i = input2.read()) != -1) {
System.out.print((char)i);}
System.out.println();
}}
//文件流的例子
import java.io.*;
class FileInputStreamDemo {
public static void main(String args[]) throws Exception {
int size;
InputStream f =
new FileInputStream("FileInputStreamDemo.java");
System.out.println("Total Available Bytes: " +
(size = f.available()));
int n = size/40;
System.out.println("First " + n +
" bytes of the file one read() at a time");
for (int i=0; i < n; i++) {
System.out.print((char) f.read());
}
System.out.println("/nStill Available: " + f.available());
System.out.println("Reading the next " + n +
" with one read(b[])");
byte b[] = new byte[n];
if (f.read(b) != n) {
System.err.println("couldn't read " + n + " bytes.");
}
System.out.println(new String(b, 0, n));
System.out.println("/nStill Available: " + (size = f.available()));
System.out.println("Skipping half of remaining bytes with skip()");
f.skip(size/2);
System.out.println("Still Available: " + f.available());
System.out.println("Reading " + n/2 + " into the end of array");
if (f.read(b, n/2, n/2) != n/2) {
System.err.println("couldn't read " + n/2 + " bytes.");
}
System.out.println(new String(b, 0, b.length));
System.out.println("/nStill Available: " + f.available());
f.close();
}
}

發佈了59 篇原創文章 · 獲贊 9 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章