ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

I/0流 字节流

2022-07-28 11:34:22  阅读:152  来源: 互联网

标签:字节 fin write byte buf 读取


I/O流 (输入/输出):

  • 两种基本的流:1. 输入流Inputstream

                                   2. 输出流 Outputsteam

  • 两种流采用相同顺序读写方式:1. 过程:打开流--->执行读(写)操作--->关闭流

                                                             2. 节点流:从特定地方读写的流类,

                                                                            例如:磁盘或一块内存区域

                                                             3. 过滤流:使用一个已经存在的输入流或者输出流连接创键的输入流

                                                                                或者输出流叫过滤或者处理流,它要对相连的另一个流进行

                                                                                某种转换。

                                                              4. OutputStream是抽象顶层父类,不能实现实例化,因此实现功能是由派生子类

 

 

 

  • 数据读取方法:1. 基本读法: read();(读一个字节返回,如返回-1,则文件结束)

                                        read(byte [] b) (将数据读入字节数组b中,返回所读字节数)

                                   2. close()(数据读取完成,关闭流)

                                   3. available() (返回未读的字节数)

                                   4. long skip (long n) (跳过(扔掉)n个字符)

                                   5. mark(int) (标记当前流,并建立int大小缓冲区)

                                   6. void reset() (返回标签处)

                                   7. 字节流数组用toString避免乱码

 

package src;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class TestFileInputStream1
{

public static void main(String[] args) throws IOException
{
FileInputStream fin=new FileInputStream("data.dat");//创建字节输入流对象fin
int c,count=0;
while ((c=fin.read())!=-1)  //读一个字节,如果不为-1,就没有达到文件末尾
{
System.out.print((char) c);//以字符形式输出。如果有汉字,输出为乱码,因为一个汉字占两个字节
count++;
}
System.out.println("\n共读取"+count+"个字节");
fin.close();//关闭fin;
}

}
​----------------------------
package src;
import java.io.*;
public class TestFileInputStream3
{

public static void main(String[] args)
{
try
{      
FileInputStream fin = new FileInputStream("data.dat");//创建字节输入流对象fin
byte buf[] = new byte[fin.available()];////创建字节数组,长度为fin中未读的字节数。
int count; //记录实际读取字节数
count=fin.read(buf);  //从文件输入流fin中读取字节数据
//count=fin.read(buf,0,buf.length); //从文件输入流fin中读取字节数据到buf数组
System.out.println("共读取"+count+"个字节");
System.out.print(new String(buf));
fin.close(); //关闭fin输入流
}
catch (IOException ioe)
{
System.out.println("I/O异常");
}

}

}
 

       输出流:

 

  • 基本读法:1. write(int c) (向输出流中写一个字节)

                            2. write(byte[]b) (向输出中写一个字节数组)

                            3. write(byte b,int offset, int length) (将字节数组b中由offset和length指示的数据块写入)

                            4. fluch() (将强制将缓存的输出数据写出去)

                  注意:必须将字符串转换为字节数组。

                             例:byte buf []=字符串.getBytes();

 

 

package src;
import java.io.*;
public class TestFileOutputStream1
{

public static void main(String[] args)
{
try
{            
FileOutputStream fout = new FileOutputStream("data.dat");//创建文件输出流对象fout
String str="more and more";
byte buf[] = str.getBytes();//将字符串str转化为字节数组
for (int i=0;i<buf.length;i++)
   fout.write(buf[i]); //逐个字节写入
System.out.print("写入文件成功!");
fout.close(); //关闭fout
}
catch (IOException ioe)
{
System.out.println("I/O异常");
}

}

}
​----------------------------
package IOinputStream;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class outStream1
{
   public static void main(String[] args) throws Exception
  {
       FileOutputStream fileOutputStream=new FileOutputStream("d:/A.txt");
       String s="写入成功";
       byte [] a=s.getBytes();//将字符串str转化为字节数组
       //fileOutputStream.write(a);
       fileOutputStream.write(a,0,a.length);
       System.out.println(a);
       fileOutputStream.close;//关闭
  }
}

总结:
  • 读方法:1. read();要一个字节读,所有要用循环来读取

                        2. read(byte [] b) 因为读取的字节数在数组中,可以直接读取。

                          例:记录读取字节数=对象.read(数组名)

  • 写方法:1. write():要一个字节一个字节读,得用循环来读取

                        2. write(byte [] b) : 直接读取。

                            例:对象.write(数组);

 

标签:字节,fin,write,byte,buf,读取
来源: https://www.cnblogs.com/zjwcoblogs/p/16528038.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有