当前位置:网站首页 > R语言数据分析 > 正文

zipentry(zipentry转inputstream)



  • 今天主要总结一下字节流和字符流的用法以及特点,以及一些例题,内有驳杂,建议选重点记忆。

流模型

  • 字节流
  • InputStream
  • OutputStream
  • 字符流
  • Reader字符输入
  • Writer字符输出流
  • 文件节点流
  • 内存数组节点
  • 总结
  • 主要目的:屏蔽具体实现的区别,使用统一的方法进行编程
  • 输入和输出
  • 字节和字符
  • 节点和过滤 装饰模式
  • BIO NIO AIO
  • 父类InputStream和OutputStream
  • 一次一字节的操作方式,一般用于声音、图像、视频之类的二进制文件

方法: - read():int -1 - read(byte[]):int -1 - close():void - FileInputStream主要用于操作文件 - System.in 主要用于接收用户输入

方法: - write(int):void - write(byte[],int,int):void - close():void - FileOutputStream主要用于操作文件 - new FileOutputStream(“文件名称”)采用文件覆盖的方式操作 - new FileOutputStream(“文件名称”,boolean是否采用追加操作) - System.out和System.err 用于输出到标准输出设备

上面的方法采用的是一次一字节的操作方法,效率较低,可以考虑引入byte[]缓存的方式提高执行效率

复杂样例

  • 实现文件夹的拷贝和移动
    文件夹的深度无法提前预知,所以这里采用递归调用的方式进行操作

一次操作一个字符 一般用于操作文本文件,注意word文档不是字符文件

  • read():int 0-65535 -1
  • read(char[]):int -1
  • close():void
  • FileReader用于操作文件,属于节点流
    读取指定文件并在控制台上进行显示

  • write(int):void
  • write(char[],int,int):void
  • close()
  • FileWriter用于操作文件
  • new FileWriter(String leName)
  • new FileWriter(String leName, boolean append)默认覆盖,boolean表示是否追加

小结

  • 在学些BIO时记忆父类的方法,区分子类的实现不同
  • InputStream中的方法 read(byte[]):int; Reader中方法read(char[]):int 如果到达流末尾则-1
  • OutputStream中的方法 write(byte[],0,len):void;Writer中的方法write(char[],0,len)/write(String)
  • 一般在使用中,如果读取数据使用字节流,则写出数据采用的也是字节流;不建议混用,除非引入桥接流
  • 文件流
  • FileInputStream(“le-name”) FileInputStream(File) FileNotFoundException
  • FileReader(“le-name”) FileReader(File) FileNotFoundException
  • FileOutputStream(“le-name”) FileOutputStream(“le-name”,true) 默认文件覆盖,如果参数true表示追加
  • FileWriter(“le-name”) FileWriter(“le-name”,true)
  • 一般不使用单字节或者单字符的操作方法,使用数组
  • 注意:try(){}是推荐写法,否则应该使用try{}nally{}结构保证流的关闭
  • 针对二进制文件不建议使用字符流,建议使用字节流进行操作,否则有可能拷贝文件出现问题:
  • 如果针对文本文件则建议使用字符流,因为编码使用比较方便

编写一个程序实现如下功能,文件n.txt是无行结构(无换行符)的汉语文件,从n中读取字符,写入文件fout.txt中,每40个字符一行(最后一行可能少于40个字)

统计一个文件calcCharNum.txt中字母’A’和’a’出现的总次数

统计一个文件calcCharNum.txt中各个字母出现次数:A(8),B(16),C(10)…,a(12),b(10),c(3)…, 括号内代表字符出现次数; 存储数据的方法1:采用数组,例如数组1中存储大写字母,数组2中存储小写字母

方法2:采用自定义类的方式记录字符和对应的出现次数

最多可以有52【26*2】个对象,可以定义一个数组用于存储数据CharNum[] cn=new CharNum[52];

编写一个程序,把指定目录下的所有的带.java文件都拷贝到另一个目录中,拷贝成功后,把后缀名是.java的改成.txt

  • 文件夹的深度未知
  • FilenameFilter
  • FileInputStream和FileOutputStream是文件字节流,是一种节点流
    文件字节输入流的构造方法:

  • FileInputStream(“文件名称”),如果文件不存在则FileNotFoundException
  • FileInputStream(File)

文件字节输出流的构造方法:

  • FileOutputStream(“文件名称”) 如果文件不存在则新建文件,如果文件存在则覆盖文件内容
  • FileOutputStream(String name文件名称, boolean append是否采用追加方式)

FileReader和FileWriter类似

  • CharArrayReader(char[] buf)其中char[]就是数据的来源,也就是说Reader就是从char[]中读取数据
  • CharArrayRead(char[] buf, int oset, int length)

CharArrayWriter用于实现向一个字符数组中写入数据,这个数组可以自动调整大小

ByteArrayInputStream、ByteArrayOutputStream和CharArrayReader以及CharArrayWriter类似,支持操作的内容不同而已,操作byte[]与char[]

从一个文件中读取内容并写入到char[]中

从char数组中读取数据

内存字串流
StringReader用于从一个字串String中读取数据,StringWriter用于给一个StringBuer中写入数据,实现一个可边长的字串

键盘录入内容,并缓存在内存中,输入quit表示输入完成,输入完成后再在控制台上显示所有输入的内容

  • 读写文件使用节点流FileInputStream/FileOutputStream和FileReader/FileWriter,如果操作文本文件,建议使用FileReader/FileWriter,如果操作二进制文件建议使用FileInputStream/FileOutputStream
  • 需要建立缓冲区(建立临时文件的方式效率低),可以考虑使用内存节点,例如CharArrayReader/CharArrayWriter、StringReader/StringWriter和ByteArrayInputStream/ByteArrayOutputStream
  • 如果需要一个二进制缓冲区可以使用ByteArrayInputStream/ByteArrayOutputStream,如果需要一个字符缓存可以使用CharArrayReader/CharArrayWriter StringReader/StringWriter
  • 如果数据量不是特别大使用CharArrayReader/CharArrayWriter更为方便,如果数据量大而且可能需要直接操作缓冲区则使StringReader/StringWriter
  • StringWriter中提供了方法getBuer():StringBuer
到此这篇zipentry(zipentry转inputstream)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • codeformer(codeformer在线网页使用)2026-03-22 13:45:04
  • ldrd指令(ldrneb指令)2026-03-22 13:45:04
  • docker最新版本号(docker升级版本)2026-03-22 13:45:04
  • noentry怎么读(norton怎么读)2026-03-22 13:45:04
  • treetop helper官网(treesoft官网下载)2026-03-22 13:45:04
  • netuser命令的作用(netsh命令的作用)2026-03-22 13:45:04
  • propram怎么读(pro,怎么读)2026-03-22 13:45:04
  • 欧美vocal的rapper(欧洲最强rapper免费高清)2026-03-22 13:45:04
  • treesize professional怎么清理c盘(wiztree怎么用删除c盘)2026-03-22 13:45:04
  • theater(theater和theatre有区别吗)2026-03-22 13:45:04
  • 全屏图片