1、声音和图像只能用字节流来传输
2、InputStream中都是抽象方法,具体功能由子类实现
3、int n = in.read()方法:1、读取一个字节
2、返回值--读取的字节所对应的ASCII码
——(对于该方法,读取的字节在返回值n中,由于是int型,所以不能强制转换成char型)
4、byte buf[] = new byte[512];
int len = in.read();
——该方法:1、读取的内容放在buf[]数组中
2、返回值:读取字节的个数
(外加小知识点:空白符对应的ASCII码 — 空格:32/回车:13/换行:10)
5、String str = new String(buf);
String的构造方法,可以将很多类型转换成String类型,这里只演示byte[],具体见API
6、InputStream:
InputStream in = new XXXInputStream("d:/in/in.txt");
若“in.txt”不存在,不会自己帮你建文件,需手动建立
OutputStream:
OutputStream out = new XXXOutputStream("d:/out/out.txt");
若“out.txt”不存在,out流会自动帮你建立(只会帮你建立文件)
——注意:上面两种,若文件夹不存在,程序都会出异常
7、键盘输入:
InputStream in = System.in;//System.in的返回值就是InputStream
//System.out的返回值是PrintStream—打印流
8、while( (len=in.read(buf))!=-1 ){//字符也有这种方法,返回的是字符个数
out.write(buf);
//若是这样写,则每次读/写 512
//若最后一次文件中已经没有512个字节,
//in.read(buf)还是读取512个字节---即又多读取了文件最前面的内容了
//out.write(buf)也写入512个字节,因此最后多写入了数据,因此该方法不好
out.write(buf,0,len);//应该用这个方法,从位置 0 写到 len-1的位置
}
9、if(in.available()>0){
......;//返回字节数,字符也有这个方法,
//注意:ObjectInputStream流不能用这个方法来判断是否读取完
}
其它:1、流只是用来传输数据的,而不是处理数据的
2、流是有方向的,且都是单向的
代码Demo:
——以FileIn/OutputStream为例:
package cn.hncu.old.stream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * 文件内容:青春若有张不老的脸 */ public class FileInOuttStreamDemo { public static void main(String[] args) { // ReadDemo(); WriteDemo(); } public static void WriteDemo(){ try { FileOutputStream out = new FileOutputStream("e:/a/b.txt"); byte buf[] = {32,97,98,99,100,101,13,10}; //byte类型——范围:-128~127 //windows中回车=\r\n Linux中回车=\n; //\r:13 \n:10 空格:32 out.write(buf); String str = "Oracle从入门到精通"; out.write(str.getBytes()); //getBytes()函数,将字符串转化成byte数组 } catch (IOException e) { e.printStackTrace(); } } public static void ReadDemo(){ try { FileInputStream in = new FileInputStream("E:/a/a.txt"); byte buf[] = new byte[512]; int len = in.read(buf);//返回值:读取字节的长度 /* * 注意:由于文件中内容是汉字,所以要考虑编码问题, * 因为系统默认存储编码是gbk,每个汉字两个字节, * 所以len=18,若存储编码为utf-8,则len=30, * 因为utf-8中一个汉字对应的字节长度为1~4个字节不等, * 但大多数是3个字节 */ System.out.println("len="+len); for(int i=0;i<len;i++){ System.out.print(buf[i]+" "); //输出每个字节对应的ASCII码 } } catch (IOException e){ e.printStackTrace(); } } }