黑马程序员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();

    }

 

}

 

python编程实现制作网络流量监控动画 c,实时显示网络带宽使用情况,用柱状图或折线图表示不同时间段的流量变化。通过 Python编程实现图形库(如 Pygame、Tkinter、Matplotlib 等)来实现计算机网络基础概念的可视化动画。global bars # 声明 bars 为全局变量。# 获取当前网络流量。# 创建图形和坐标轴。 阅读详情

相关推荐

LangChain Agent Skills 实战指南:12个案例玩转智能体技能封装与编排

大语言模型应用开发中,智能体(Agent)的能力扩展正从零散的函数调用走向标准化封装。Agent Skills 将某项具体能力组织为带说明、代码与依赖的技能目录,让模型能自动发现和调度,其核心价值在于解决工具数量膨胀后的维护混乱与调用失控问题。与 Tool 的单一执行、MCP 的协议连接不同,Skill 更强调能力的语义描述与组合复用,配合 LangGraph 的状态编排和 LangSmith 的可观测性,可构建生产级智能体系统。在实际场景中,Agent Skills 可覆盖 RAG 知识库问答、多轮记忆保

weixin_34335458的博客 407

java基础学习-IO流

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

mrwolf45的专栏 283

[信号与系统]一阶与二阶连续时间系统和离散时间系统

定义:一阶连续时间系统由一阶线性常系数微分方程描述: dy(t)dt+ay(t)=bx(t) \frac{dy(t)}{dt} + a y(t) = b x(t) dtdy(t)​+ay(t)=bx(t)时间常数:时间常数 τ=1a\tau = \frac{1}{a}τ=a1​ 是系统响应速度的衡量指标。时间常数越小,系统响应越快。冲激响应:一阶系统的冲激响应是指数衰减或增长的形式。例如,对于一个单位冲激输入,响应为: h(t)=bae−at h(t) = \frac{b}{a} e^{-at} h(t)=

Andius的博客 2121

《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万+

基于Ultralytics RT-DETR的工业缺陷检测实战:从NEU-DET数据集准备到模型部署

本文详细介绍了基于Ultralytics框架和RT-DETR模型进行工业缺陷检测的完整实战流程。内容涵盖从NEU-DET数据集准备、YOLO格式转换、环境配置,到模型训练、关键参数调优、性能验证与可视化分析,最后提供了ONNX等格式的模型部署方案,为工业质检场景提供了一套高效、可落地的AI解决方案。

weixin_29168393的博客 339

深度学习在传感器数据分析中的创新应用

传感器是物理世界与数字世界的“接口”,其生成的高维、时序、多源数据蕴含着设备状态、环境变化、用户行为等关键信息。传统传感器数据分析依赖手工特征工程与简单机器学习模型,难以应对复杂场景下的非线性、长程依赖与实时性需求。深度学习通过自动特征提取非线性建模与端到端学习,成为传感器数据处理的革命性工具。本文从概念基础理论框架架构设计实现机制到实际应用,系统拆解深度学习与传感器数据的融合逻辑,结合工业预测维护医疗健康监测智能交通等场景,揭示其技术边界与未来演化方向。

大数据洞察的博客 568

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

流,file

332

手把手教你学simulink(42.1)--储能系统场景示例:基于Simulink的电池+超级电容器混合储能系统

混合储能系统(HESS)结合了电池和超级电容器的优点,能够在满足高功率需求的同时提供较长的持续放电时间。这种组合特别适合用于电动汽车、可再生能源发电系统、电网频率调节等应用场景。本项目将详细介绍如何在MATLAB/Simulink中搭建一个完整的基于电池和超级电容器的混合储能系统,并提供具体的代码实现和设计步骤。如果你需要实现更复杂的控制逻辑,可以使用MATLAB Function模块。以下是一个简单的例子,展示了如何在该模块中实现一个条件逻辑,以分配电池和超级电容器的充放电任务。Matlab。

MHD0815的博客 542

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

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

lamstudyingnet的专栏 497

【Unity引擎技术整合】 Unity学习路线 | 知识汇总 | 持续更新 | 保持乐趣 | 共同成长

本文对Unity引擎的知识进行了一个整理总结,基本包含了Unity中大部分的知识介绍。 网上也有很多Unity相关的学习资料,但大多数都不成体系,学起来的时候难免会东奔西走的摸不着头脑。 本文整理的多数文章都是有对应的系列性文章专栏,可以更方便的进行系统学习相关知识体系。

努力前行,总会成为自己心中的那道光 15万+

某头部金融APP防护机制逆向实录:从反调试到TEE加密的全链路攻防拆解

金融APP安全防护体系深度破解分析 本文详细拆解了某头部金融APP的三重防御机制破解过程。首先通过Frida绕过反调试技术,包括ptrace自我绑定、TracerPid检测和debuggerd监控;随后针对12种Root检测方法(如su文件检查、Magisk检测等)进行环境伪装,通过Hook系统调用伪造安全环境;最后逆向分析TEE加密模块,解密关键接口参数。整个破解过程涉及静态分析、动态调试和代码注入技术,揭示了金融级APP安全防护的实现原理与突破方法(注:所有操作均获授权,仅用于安全研究)。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1399

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

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

dsw00523的专栏 348

OpenFeign整合Sentinel实现熔断降级

常用于实现熔断降级的框架有Hystrix、Sentinel,我们常说的Spring Cloud项目说的其实是Spring Cloud Netflix,Hystrix以及前面学习过的Ribbon都是Netflix系的家族成员,所以使用Hystrix可以非常简单的与当前项目中使用到的OpenFeign、Ribbon整合,但笔者并没有选择Hystrix,而是选择阿里系的Sentinel。 为什么选择Sentinel而不是Hystrix?从接入简单考虑可能选择Hystrix是不错的选择,但笔者对Hyst...

吴就业 6718

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

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

313

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

zhengylsc的专栏 1080

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

Java I/O 详解 foundation

Das20pct的博客 658

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

黑马程序员—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、付费专栏及课程。

余额充值