Java学习第二周—Java Stream、File、IO

Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。

Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。

一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。

Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。

但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。

读取控制台输入

Java 的控制台输入由 System.in 完成。

为了获得一个绑定到控制台的字符流,你可以把 System.in 包装在一个 BufferedReader 对象中来创建一个字符流。

下面是创建 BufferedReader 的基本语法:

BufferedReader 对象创建后,我们便可以使用 read() 方法从控制台读取一个字符,或者用 readLine() 方法读取一个字符串。

读写文件

如前所述,一个流被定义为一个数据序列。输入流用于从源读取数据,输出流用于向目标写数据。

下图是一个描述输入流和输出流的类层次图。

下面将要讨论的两个重要的流是 FileInputStreamFileOutputStream

FileInputStream

该流用于从文件读取数据,它的对象可以用关键字 new 来创建。

有多种构造方法可用来创建对象。

可以使用字符串类型的文件名来创建一个输入流对象来读取文件:

也可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象:

FileOutputStream

该类用来创建一个文件并向文件中写数据。

如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。

有两个构造方法可以用来创建 FileOutputStream 对象。

使用字符串类型的文件名来创建一个输出流对象:

也可以使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:

下面是一个演示 InputStream 和 OutputStream 用法的例子:

上面的程序首先创建文件test.txt,并把给定的数字以二进制形式写进该文件,同时输出到控制台上。

以上代码由于是二进制写入,可能存在乱码,你可以使用以下代码实例来解决乱码问题:

···自己写了一个简单的小程序用来剪辑特定长度的音频,并将它们混剪在一起

大体思路是这样的:

  1. 使用 FileInputStream 输入两个音频

  2. 使用 FileInputStream的skip(long n) 方法跳过特定字节长度的音频文件,比如说:输入 skip(102410243),这样就能丢弃掉音频文件前面的 3MB 的内容。

  3. 截取中间特定长度的音频文件:每次输入 8KB 的内容,使用 count 记录输入次数,达到设置的次数就终止音频输入。比如说要截取 2MB 的音频,每次往输入流中输入 8KB 的内容,就要输入 1024*2/8 次。

  4. 往同一个输出流 FileOutputStream 中输出音频,并生成文件,实现音频混合。

Original: https://www.cnblogs.com/kamisato132/p/16571119.html
Author: 依旧灬氵
Title: Java学习第二周—Java Stream、File、IO

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/593713/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 深圳黑马JavaEE第104期基础班+就业班+高手课件(笔记))

    大型网站的系统架构并不是从一开始就具备高性能、高可用、高伸缩等特性的。小型创业公司通常不需要设计非常复杂的系统架构,能将基本的业务跑起来就行。 随着用户和业务量的增加,系统架构需要…

    Java 2023年6月7日
    086
  • Java设计模式之(十二)——观察者模式

    1、什么是观察者模式? Define a one-to-many dependency between objects so that when one object change…

    Java 2023年5月29日
    0110
  • 个人学期总结

    个人学期总结 本学期共发表博客93篇 开正题之前先发表一下感慨,说实话,这个学期真的过的很快,转眼间就要大三了,直到现在,我还能清楚的记得这个学期我大概的经历,我是3月1号来的学校…

    Java 2023年6月7日
    099
  • 使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制

    模块介绍 memc-nginx和srcache-nginx模块均为前淘宝工程师agentzh(章亦春)开发。其中memc模块扩展了Nginx标准的memcache模块,增加了set…

    Java 2023年5月30日
    097
  • String 对象

    String对象及底层区别 String 对象 两种方式 方式一:直接使用双引号得到字符串对象 代码: //方式一:直接使用双引号得到字符串对象 String name = &qu…

    Java 2023年6月6日
    077
  • Java学习-动手动脑3

    import java.util.Scanner; public class main { public static void show() { System.out.print…

    Java 2023年6月9日
    0172
  • 【spring源码学习】spring如何完成IOC容器构建

    一、整体思路 1、整体思路 第一步:获取RootBeanDefinition 第二步:获取该BeanDefinition的依赖,将依赖关系注入到DefaultSingletonBe…

    Java 2023年5月29日
    090
  • Android学习笔记——四大组件

    Activity IBindle 是一个简单的数据携带包,用于实现 Activity 之间的数据交换。Intent 提供了 putExtras() 和 getExtras() 方法…

    Java 2023年6月8日
    088
  • 为什么有了并发安全的集合还需要读写锁?

    大家好,我是三友,这篇文章想来跟大家来探讨一下,在Java中已经提供了并发安全的集合,为什么有的场景还需要使用读写锁,直接用并发安全的集合难道不行么? 在java中,并发安全的集合…

    Java 2023年6月16日
    0137
  • 如果程序员没了手!

    前些天手摔伤了,一直养着,这段时间最大的体会是:没有手真麻烦,没有右手真痛苦。 只能左手上啦 正好赶上最近事情也多,一些事务性的工作啦等等,总是在不停地求助,住院期间就不说了,幸好…

    Java 2023年5月30日
    0112
  • Java之线程池深度剖析

    1.线程池的引入引入的好处:1)提升性能。创建和消耗对象费时费CPU资源2)防止内存过度消耗。控制活动线程的数量,防止并发线程过多。使用条件:假设在一台服务器完成一项任务的时间为T…

    Java 2023年5月29日
    089
  • 力扣刷题-1两数求和

    自己只会暴力求解,看见大佬的进阶求解,感觉tql,题源链接 Original: https://www.cnblogs.com/chaos2022/p/16608877.htmlA…

    Java 2023年6月13日
    094
  • arthas学习图文记录

    Arthas 是阿里开源的 Java 诊断工具。在线排查问题,无需重启;动态跟踪 Java 代码;实时监控 JVM 状态。Arthas 支持 JDK 6+,支持 Linux/Mac…

    Java 2023年6月5日
    0140
  • Git常用命令总结

    Git常用命令总结 Git日志 git log git log –all 查看所有分支的log git log –all –graph 图形化展…

    Java 2023年6月6日
    0100
  • <5>Linux-静态库和动态库

    1 库及库的分类 库本质:是二进制形式的目标代码(.o) 库的作用? † 库的分类:静态库和动态库(共享库)。 静态库和动态库的区别 如果程序是在编译时加载库文件的,就是使用了静态…

    Java 2023年6月15日
    074
  • 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v5.8.8版)

    TableGo v5.8.8版震撼发布,此次版本更新如下:1、新增两个扩展字段,用于生成自定义模板时使用。2、自定义模板新增模板目录,可以选择不同分类目录下的模板。3、自定义模板生…

    Java 2023年6月9日
    0110
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球