昨晚上做了一个很奇怪的梦从A地怎么也走不到B地,我记得坐公交可以很方便的到达可是在梦里我忘记了应该坐哪路公交用手机查也打不出那几个字我记得那几个字应该是太原南站~好诡异。这是反应了不想到这里来的潜意识。但我在这里,这就是结果。既来之,则安之。好吧,还是打球去。
开始技术~
通常能直接操作文件流的对象是最基本的流对象,所以现在开始学习字节流。它不仅可以操纵字符还可以操作其他媒体文件,基本操作与字符就相同。相应的方法里有write,flush,close等。同时需要注意字节流的缓冲区是byte[],而字节流是char[]。当要以字节形式传字符的时候需要用到getByte()如:"linweieran".getByte();同时因为这是因为它不需要编解不需要临时存储缓冲,直接写入目的地中,所以不写flush和close也可以将数据写入文件中。相应代码下:
public static void demo_write() throws IOException {
//1.创建字节输出流对象,用于操作文件
FileOutputStream fos = new FileOutputStream("bytedemo.txt");
//2.写数据(把字符串变为字节的方法就是使用getByte)
fos.write("linweieran".getBytes());
//在没有写flush和close的情况下也可以正常的写入,这是因为它不需要编解码,不需要临时存储缓冲
//直接写入目的地中
//fos.flush();
fos.close();
}
下面来读取一个字节文件,需要注意的是当用read每次读取一个字节,在读英文时和字符流没有区别,每次读取一个英文字符,但当读取中文时一个中文2个字节,但使用字符可以一次读取一个中文汉字。相同的读取文件可以使用read读字节和读byte[]数组。同时在这个里面有available()方法,可以让数组的大小更精确,建议使用读字节数组,代码如下:
public static void demo_read() throws IOException {
//1.创建一个读取流对象和指定文件关联
FileInputStream fin = new FileInputStream("bytedemo.txt");
//2.读数据
byte[] buf = new byte[fin.available()]; //精确设定字符数组的大小,但要慎用
fin.read(buf);
System.out.println(new String(buf));
/*(2).读字符数组
byte[] buf = new byte[fin.available()];
int len = 0;
while((len=fin.read(buf))!=-1){
System.out.println(new String(buf,0,len));
}
*.
/*(3).(一次读取一个字节)
int ch = 0;
while((ch=fin.read())!=-1){
System.out.println((char)ch);
}
*/
fin.close();
}
好的,终于搞定了