非套接字节流

    xiaoxiao2021-03-25  69

    非套接字节流知识点: 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(); } } }

    转载请注明原文地址: https://ju.6miu.com/read-39986.html

    最新回复(0)