黑马程序员Java I/O系统2

黑马程序员入学Java知识——精华总结 黑马程序员入学Java知识——精华总结   J2SE部分,Java高新技术部分,7K面试题部分等黑马入学要求的知识点总结!   一、黑马程序员—java概述与基础知识 6 1、何为编程? 6 2、Java语言概述,历史、特点 6 3、什么是跨平台性?原理是什么?JVM 7 4、Jre和Jdk的区别? 7 5、java虚拟机JVM 8 6、 Java程序运行机制 8 7 阅读详情

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

黑马程序员Java I/O系统2

装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰模式可以在不创造更多子类的情况下,将对象的功能加以扩展。

若处理的数据量较多,为避免每个字节的读写都对流进行,可以使用过滤流类的子类缓冲流。缓冲流建立一个内部缓冲区,输入输出数据先读写到缓冲区中进行操作,这样可以提高文件流的操作效率。缓冲字节流类是BufferedInputStream和BufferedOutputStream。BufferedInputStream类允许把任何InputStream类“包装”成缓冲流并使它的性能提高。当创建缓冲输入流BufferedInputStream时,一个输入缓冲区数组被创建,来自流的数据填入缓冲区,一次可填入许多字节。

缓冲输出流BufferedOutputStream类提供和FileOutputStream类同样的写操作方法,但所有输出全部写入缓冲区中。当写满缓冲区或关闭输出流时,它再一次性输出到流,或者用flush()方法主动将缓冲区输出到流。它通过减小系统写数据的时间而提高性能。缓冲输出不提供额外的功能,只是为了提高性能。

import java.io.BufferedInputStream;

import java.io.FileInputStream;

import java.io.IOException;

publicclass buffer {

    publicstaticvoid main(String[] args) throws IOException

    {

       //创建一个读取流对象和文件相关联。

       FileInputStream fr = new FileInputStream("buf.txt");

       //为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。

       BufferedInputStream bufr = new BufferedInputStream(fr);

       int line = 0;

       while((line=bufr.read())!= -1)

       {

           System.out.print(line);

       }

       bufr.close();

    }

}

 

import java.io.BufferedOutputStream;

import java.io.FileOutputStream;

import java.io.OutputStream;

publicclass BufferedOutputStreamTest {

    publicstaticvoid main(String[] args) throws Exception

    {

       OutputStream os = new FileOutputStream("1.txt");

       BufferedOutputStream bos = new BufferedOutputStream(os);

       bos.write("http://www.google.com".getBytes());

       bos.close();

       os.close();

    }

}

SequenceInputStream类允许连接多个InputStream流。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,以此类推,直到到达包含的最后一个输入流的文件末尾为止。

DataInputStream和DataOutputStream类提供进行基本数据类型如整数和浮点数的输入/输出,这两个类的对象必须和一个输入类或输出类联系起来,而不能直接用文件名或文件对象建立。使用数据文件流的一般步骤:

1.       建立字节文件流对象

2.       基于字节文件流对象建立数据文件流对象

3.       用流对象的方法对基本类型的数据进行输入/输出

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;

 

publicclass DataStream

{

    publicstaticvoid main(String[] args) throws Exception

    {

       DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(

              new FileOutputStream("data.txt")));

       byte b = 3;

       int i = 12;

       char ch = 'a';

       float f = 3.3f;

       dos.writeByte(b);

       dos.writeInt(i);

       dos.writeChar(ch);

       dos.writeFloat(f);

       dos.close();

       DataInputStream dis = new DataInputStream(new BufferedInputStream(

              new FileInputStream("data.txt")));    

       //读和写的顺序要保持一致

       System.out.println(dis.readByte());

       System.out.println(dis.readInt());

       System.out.println(dis.readChar());

       System.out.println(dis.readFloat());

      

       dis.close();

    }

}

 

 

管道流用于线程间的通信。一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须同时构造管道输入流和管道输出流。传送输入流会提供要写入传送输出流的所有数据字节。数据由某个线程从PipedInputStream对象读取,由其他线程将其写入到相应的PipedOutputStream。数据由某个线程写入PipedOutputStream对象并由其他线程从连接的PipedInputStream读取。connect()方法将这两个流连接起来。

package seventh;

import java.io.*;

class Read implements Runnable

{

    private PipedInputStream in;

    Read(PipedInputStream in)

    {

       this.in = in;

    }

    publicvoid run()

    {

       try

       {

           byte[] buf = newbyte[1024];

 

           System.out.println("读取前。。没有数据阻塞");

           int len = in.read(buf);

           System.out.println("读到数据。。阻塞结束");

           String s= new String(buf,0,len);

 

        System.out.println(s);

           in.close();

       }

       catch (IOException e)

       {

           thrownew RuntimeException("管道读取流失败");

       }

    }

}

 

class Write implements Runnable

{

    private PipedOutputStream out;

    Write(PipedOutputStream out)

    {

       this.out = out;

    }

    publicvoid run()

    {

       try

       {

           System.out.println("开始写入数据,等待6秒后。");

           Thread.sleep(6000);

           out.write("piped lai la".getBytes());

           out.close();

       }

       catch (Exception e)

       {

           thrownew RuntimeException("管道输出流失败");

       }

    }

}

 

publicclass  PipedStreamDemo

{

    publicstaticvoid main(String[] args) throws IOException

    {

       PipedInputStream in = new PipedInputStream();

       PipedOutputStream out = new PipedOutputStream();

       in.connect(out);

       Read r = new Read(in);

       Write w = new Write(out);

       new Thread(r).start();

       new Thread(w).start();

    }

}

创建了一个文件读取流对象,和指定名称的文件相关联。要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException,如下

FileReader fr = new FileReader("demo.txt");

创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。

FileWriter fw = new FileWriter("demo.txt");

readLine方法返回的时候只返回回车符之前的数据内容。并不返回回车符。

获取键盘录入对象:InputStream in = System.in;

将字节流对象转成字符流对象,使用转换流InputStreamReader

InputStreamReader isr = new InputStreamReader(in);

流操作的基本规律:

通过三个明确来完成。

1,明确源和目的。

         源:输入流。InputStream  Reader

         目的:输出流。OutputStream  Writer。

2,操作的数据是否是纯文本。

         是:字符流。

         不是:字节流。

3,当体系明确后,在明确要使用哪个具体的对象。

         通过设备来进行区分:

         源设备:内存,硬盘。键盘

         目的设备:内存,硬盘,控制台。

键盘的最常见写法:BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

打印流:该流提供了打印方法,可以将各种数据类型的数据都原样打印。

字节打印流:PrintStream

构造函数可以接收的参数类型:

1,file对象。File

2,字符串路径。String

3,字节输出流。OutputStream

字符打印流:PrintWriter

构造函数可以接收的参数类型:

1,file对象。File

2,字符串路径。String

3,字节输出流。OutputStream

4,字符输出流,Writer。

import java.io.*;

 

publicclass  PrintStreamDemo

{

    publicstaticvoid main(String[] args) throws IOException

    {

       BufferedReader bufr =

           new BufferedReader(new InputStreamReader(System.in));

       PrintWriter out = new PrintWriter(new FileWriter("a.txt"),true);

       String line = null;

       while((line=bufr.readLine())!=null)

       {

           if("over".equals(line))

              break;

           out.println(line.toUpperCase());

       }

       out.close();

       bufr.close();

    }  

}

Properties是hashtable的子类。也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串。在加载数据时,需要数据有固定格式:键=值。

那么map+io -->properties. 配置文件可以实现应用程序数据的共享。

在流操作规律讲解时:

源设备,

         键盘 System.in,硬盘 FileStream,内存 ArrayStream。

目的设备:

         控制台 System.out,硬盘FileStream,内存 ArrayStream。

编码:字符串变成字节数组。

解码:字节数组变成字符串。使用工具类Arrays

RandomAccessFile

该类不是算是IO体系中子类。

而是直接继承自Object。

但是它是IO包中成员。因为它具备读和写功能。

内部封装了一个数组,而且通过指针对数组的元素进行操作。

可以通过getFilePointer获取指针位置,

同时可以通过seek改变指针的位置。

其实完成读写的原理就是内部封装了字节输入流和输出流。

如果模式为只读 r。不会创建文件。会去读取一个已存在文件,如果该文件不存在,则会出现异常。

如果模式rw。操作的文件不存在,会自动创建。如果存则不会覆盖。

import java.io.RandomAccessFile;

 

publicclass RandomAccessFile1

{

    publicstaticvoid main(String[] args) throws Exception

    {

       Person p = new Person(1, "hello", 5.42);

       RandomAccessFile raf = new RandomAccessFile("test.txt", "rw");

       p.write(raf);

       Person p2 = new Person();

       raf.seek(0); // 让读的位置重回到文件开头

       p2.read(raf);

       System.out.println(p2.getId() + ", " + p2.getName() + ", "

              + p2.getHeight());

    }

}

class Person

{

    intid;

 

    String name;

 

    doubleheight;

 

    publicint getId()

    {

       returnid;

    }

 

    publicvoid setId(int id)

    {

       this.id = id;

    }

 

    public String getName()

    {

       returnname;

    }

 

    publicvoid setName(String name)

    {

       this.name = name;

    }

 

    publicdouble getHeight()

    {

       returnheight;

    }

 

    publicvoid setHeight(double height)

    {

       this.height = height;

    }

 

    public Person()

    {

 

    }

 

    public Person(int id, String name, double height)

    {

       this.id = id;

       this.name = name;

       this.height = height;

    }

    publicvoid write(RandomAccessFile raf) throws Exception

    {

       raf.writeInt(this.id);

       raf.writeUTF(this.name);

       raf.writeDouble(this.height);

    }

 

    publicvoid read(RandomAccessFile raf) throws Exception

    {

       this.id = raf.readInt();

       this.name = raf.readUTF();

       this.height = raf.readDouble();

    }

 

}

 

用Logisim搞定华科计组实验:单总线CPU设计从微程序到硬布线的保姆级通关攻略 本文详细介绍了如何使用Logisim完成华中科技大学计算机组成原理实验中的单总线CPU设计,涵盖从微程序控制器到硬布线控制器的完整实现过程。通过MIPS指令译码器设计、微程序控制原理、状态机实现等关键步骤的保姆级教程,帮助学生掌握CPU设计的核心技能,并提供Educoder平台提交与调试的实用技巧。 阅读详情

相关推荐

西门子S7-1200模拟量的使用

模块类型核心参数输入信号处理输出信号配置转换原理数值范围TIA Portal配置编程要点 转换公式: 输出模拟量: 五、校准与线性化 硬件校准非线性补偿抗干扰措施数字滤波温度控制压力监控流量调节信号异常精度不足实践操作参考文档项目案例借鉴博客

weixin_51020122的博客 4770

java基础学习-IO流

IO流 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。  File

mrwolf45的专栏 283

从模组到集装箱:手把手拆解一个储能BMS的软硬件架构设计与通信组网

本文深入解析储能BMS的软硬件架构设计与通信组网,从电芯采样到系统集成的全链条技术实现。详细介绍了三级硬件架构(AFE、CMU、BMU)的设计要点,以及软件分层实现中的驱动层、应用层核心算法和通信协议栈。通过实战案例分享CAN网络搭建、调试工具链和系统验证测试经验,为储能系统开发提供实用指导。

weixin_30752699的博客 462

《Java基础入门第2版》--黑马程序员 课后答案及其详解 第7章 I/O流

文章目录一、填空题二、判断题三、选择题四、简答题五、编程题六、原题及其解析 一、填空题 1、 字节流、字符流 2、 Channel、Buffer 3、 InputStreamReader、OutputStreamWriter 4、 Buffer、Channel、Selector 5、RandomAccesseFile 二、判断题 1、 错 2、对 3、对 4、对 5、错 三、选择题 1、AB 2、C 3、AB 4、A 5、B 四、简答题 1、Java程序通过I/O流来完成输

hypertext123的博客 1万+

脑电分析:为什么大脑信号会“变同步”?——事件相关同步化与去同步化 (ERS/ERD) 全景解析

脑电分析中的事件相关同步化(ERS)和去同步化(ERD)是研究大脑动态节律的重要方法,反映特定任务下脑电频段能量的变化。ERD表示神经元活动分散(功率下降),提示脑区活跃处理信息;ERS则反映神经元同步(功率增强),常与静息状态相关。本文详解了ERS/ERD的生理机制、计算流程(包括基线校正和功率谱分析),并提供了Python实现示例,展示如何通过Welch法和STFT进行时频分析,生成ERD/ERS热力图。该技术广泛应用于运动想象脑机接口、癫痫检测等领域,为理解大脑功能状态提供了量化工具。

qq_32516809的博客 1395

英飞凌TC3xx实战:PWM中点触发ADC采集+DMA自动搬运完整配置流程(基于ILLD库)

本文详细介绍了在英飞凌TC3xx系列微控制器上使用ILLD库实现PWM中点触发ADC采集并通过DMA自动搬运数据的完整配置流程。该方案适用于电机控制、电源管理等需要高精度定时采集的场景,通过GTM生成PWM信号、ADC采集和DMA传输实现全硬件自动化流程,显著提升系统效率。

weixin_42536058的博客 534

黑马程序员——Java I/O系统

流,file

332

嵌入式学习之QT学习---14 QT跨平台运行之把QT程序交叉编译到ARM开发板

想要把qt工程放到开发板上运行,就需要用到交叉编译。由于qt是跨平台的,所以只需要换个编译器编译一下就可以。 以“定时器”的例子为例,在移植之前还需要进行一个准备工作,在windows下运行的时候,电脑屏幕很大,但是运行的窗口只有一点点大,开发板也有外接屏幕,如何让运行窗口自动适配开发板的外接屏幕呢?令其占满屏幕显示,而不是一小块。 第一步:需要设置一下,先给ui布局,如果不布局,控件就不会随着屏幕的大小的变化而变化。 第二步:利用代码来获取屏幕的大小,给widget.cpp文件下添加如下代码 #inclu

qq_42822743的博客 5457

黑马程序员java I/O系统1

------- android培训、java培训、期待与您交流! ---------- 黑马程序员java I/O系统1 File类的对象,表示了磁盘上的文件或目录,提供了与平台无关的方法来对磁盘上的文件或目录操作。File类描述了文件本身的属性,用来获取或处理磁盘文件相关的信息,例如权限,时间,日期和目录路径。File类还可以浏览子目录层次结构。目录管理的主要方法为:mkdir()根据抽

lamstudyingnet的专栏 497

Jenkins Job DSL:用代码管理CI/CD配置的实践指南

Jenkins 是持续集成(CI)领域的经典开源平台,其核心价值在于自动化构建与交付流程。然而传统 UI 配置方式导致配置不可版本化、难以复现、审计困难,严重制约团队规模化协作效率。Job DSL 作为一种声明式配置即代码(IaC)方案,通过 Groovy 脚本驱动 Jenkins 内部 API,实现 Job、View、Folder 等资源的程序化创建与维护,天然支持 Git 版本控制、权限审计与环境一致性保障。它不替代 Pipeline,而是与其协同构成‘流程定义’与‘基础设施定义’双轨体系,显著提升 C

weixin_33744141的博客 518

SAP ABAP Append structure 介绍

所有在 append structure 上增强的字段都是 append structure 的一部分,这意味着对这些增强所做的任何更改仅仅施加在 append structure 上,而不会影响被增强的 ABAP DDIC 结构。这同样适用于 transport. 激活数据库表或结构时,会找到所有关联的 append structure,并将它们的组件附加到数据库表或结构。Append structure(附加结构)是 ABAP 字典中附加到另一个结构或数据库表并将其组件附加到它们的结构。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1165

黑马程序员-java基础——I/O

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- 详细请查看:www.itheima.com

dsw00523的专栏 348

【SAP HANA 24】HANA与Oracle SQL语法对照表

HANA SQL参考及Oracle 语法对照

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 1421

黑马程序员-04-I/O技术

黑马程序员-04-I/O技术                                                          ------- android培训、java培训、期待与您交流! ---------- /*                                                                

313

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

黑马程序员_输入输出流(I/O)

输入输出流(I/O)     流(Stream)     在java API中,可以从其中读入一个字节序列的对象称做输入流,而可以向其中写入一个字节序列的对象称做输出流。这些字节序列的来源地和目的地可以是文件,而且通常都是文件,但是也可以是网络连接,甚至是内存块。抽象类InputStream和OutputStream构成了有层次结构的输入/输出(I/O)类的基础。     因为面向字节的流不

zhengylsc的专栏 1080

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

黑马程序员 第五篇 Java I/O (foundation, completed)

Java I/O 详解 foundation

Das20pct的博客 658

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

黑马程序员—I/O

------- android培训、java培训、期待与您交流! ---------- 1,File类是IO包中唯一代表磁盘文件本身信息的类,而不是文件中的内容,File类定义了一些与平台无关的方法来操纵文件,例如:创建、删除文件和重命名文件,Java中的目录被当作一种特殊的文件使用,list方法可以返回目录中的所有目录和文件名。在Unix下的路径分隔符为(/),在Dos下的路径分隔符为(\),

Andy的乐园 1539

黑马程序员——java基础---I/O流

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、I/O流概述   概念:I/O流用来处理设备之间的数据传输。Java对数据的操作是通过流的方式,而操作流的对象都放在IO包中。   分类:     按操作数据分为:字符流与字节流。     按流向分为:输入流与输出流。    IO流常用基类:   ...

Sa916487698的博客 324

《Java基础入门》第三版--黑马程序员课后习题(编程部分)

Java基础入门第三版——黑马练习题 第 1 章 Java 开发入门,第 2 章 Java 编程基础,第 3 章 面向对象(上) ,第 4 章 面向对象(下),第 5 章 异常 ,第 6 章 Java API ,第 7 章 集合类,第 8 章 泛型,第 9 章 反射,第 10 章 IO(输入输出) ,第 11 章 JDBC,第 12 章 多线程,第 13 章 网络编程

WZY22502701的博客 1万+

黑马程序员_Java I/O 技术

------- android培训、java培训、期待与您交流! ---------- 输入/输出处理是程序设计中非常重要的一部分,比如从键盘读取数据、从文件中读取数据或向文件中写数据等等。Java把这些不同类型的输入、输出源抽象为流(stream),用统一接口来表示,从而使程序简单明了。 Jdk 提供了包java.io,其中包括一系列的类来实现输入/输出处理。进行I/O操作时可能会产

QQ153194574的专栏 620

黑马程序员 总结(十七)——I/O流(一)

------- android培训、java培训、期待与您交流! ---------- I/O流 程序在执行时通常要和外部进行交互,从外部读取数据或向外部设备发送数据,这就是所谓的I/O。Java使用抽象概念——流(stream)来描述程序与数据发送或者接收的通道。I/O流有不同的分类,按照流的方向分为输入流和输出流。按照操作的数据分为字节流和字符流。在I/O流中有四个基本抽象类,字节流2个,

heshiyingx的专栏 824

黑马程序员———I/O流

《黑马程序员》 ---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- I/Oliu ---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

Jon_Jesse的专栏 621

【黑马程序员】java I/O 学习总结

---------- ASP.Net+Unity开发、.Net培训、期待与您交流! -------- /**  * (1)路径分隔符,一般在windows版本的java中使用正斜杠"/",如果使用反斜杠要转义"\\"  *   * (2)File的renameTo(File newName)方法不仅是重命名,还会根据newName中的路径移动  * 文件位置,无法跨文件系统,目标目录

进击的程序猿 549

黑马程序员——Java基础--- I/O输入输出流

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1.流是一组有序的数据序列,分输入流/输出流,这些类都放在java.io包 输入流(父类InputStream,Reader)一般提供方法(并不是所有的子类中都支持其下的方法) read()输入流中读取数据的下一个字节返回0-255int字节值,read(byte[] b)返回字节值,ma

qq_27728631的博客 585

黑马程序员-java-I/O

 ---------------------- ASP.Net+Unity">http://www.itheima.com"target="blank">ASP.Net+Unity开发、.Net">http://www.itheima.com"target="blank">.Net培训、期待与您交流! ----------------------  java语言的输入输出功能是十分

LinsCode的专栏 852

黑马程序员:java I/O流

------- android培训、java培训、期待与您交流! ---------- 模板

u011373068的专栏 559
上一篇: 黑马程序员java I/O系统1
下一篇: 黑马程序员Java基础加强
lamstudyingnet
博客等级 码龄15年 1粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值