java基础(IO流)

基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案分享 各位FPGAer周末愉快,今天熊猫君分享一个基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案。 阅读详情

1.流的概念

在计算机中,流是个抽象的概念,是对输入输出设备的抽象。在Java程序中,对于数据的输入/输 出操作,都是以"流"的方式进行

数据以二进制的形式在程序与设备之间流动传输,就像水在管道里流动一样,所以就把这种数据传输的 方式称之为输入流、输出流。这里描述的设备,可以是文件、网络、内存等

流具有方向性,可以分为输入和输出。
以java程序本身作为参照点,如果数据是从程序“流向”文件,那么这个流就是输出流,如果数据是从文 件“流向”程序,那么这个流就是输入流。例如:
在这里插入图片描述

2. 流的分类

java中的IO流可以根据很多不同的角度进行划分,常见的是以数据的流向和数据的类型来划分

根据数据的流向分为:输入流和输出流
输入流 :把数据从其他设备上读取到程序中的流 输出流 :把数据从程序中写出到其他设备上的流
输出流 :把数据从程序中写出到其他设备上的流

根据数据的类型分为:字节流和字符流
字节流 :以字节为单位(byte),读写数据的流
字符流 :以字符为单位(char),读写数据的流

在这里插入图片描述

字节输入流,在程序中,以字节的方式,将设备(文件、内存、网络等)中的数据读进来
字节输出流,在程序中,以字节的方式,将数据写入到设备(文件、内存、网络等)中
字符输入流,在程序中,以字符的方式,将设备(文件、内存、网络等)中的数据读进来
字符输出流,在程序中,以字符的方式,将数据写入到设备(文件、内存、网络等)中

注意,字节指的是byte,字符指的的是char

3 .流的结构

在Java中,和IO流相关的类,主要是在 java.io 包下的定义的

InputStream ,代表字节输入流类型
OutputStream ,代表字节输出流类型
Reader ,代表字符输入流类型
Writer ,代表字符输出流类型
java中常用的流及其关系结构,如下:
在这里插入图片描述
注意,一般情况下,一个流,会具备起码的三个特点:
是输入还是输出
是字节还是字符
流的目的地

其中,流的目的地指定是: 如果是输入流,就表示这个流从什么地方读数据,如果是输出流,就表示这 个流把数据写到什么地方!

例如, InputStream ,是所有字节输入流的抽象父类型。
那么它的子类型一定是以 字节 的方式,从某个地方把数据 读 取到程序中,只是不同的子类型,它们 的 目的地 不一样,并且一般可以通过子类型的名字看出它的的目的地是哪里,例如:
ByteArrayInputStream ,它是以字节的形式,去读取某个地方的数据,通过名字可以看出,它 的目的地是字节数组中,也就是以字节的形式从byte数组中读取数据
FileInputStream ,它是以字节的形式,去读取某个地方的数据,通过名字可以看出,它的目的

4.字节流

4.1 概述

计算机中,存储一切数据(文本、图片、视频等),都是以二进制的形式进行的,终都是一个一个的字 节,所以使用流,进行传输数据的时候,也是一个一个的字节进行的。
java.io.InputStream 是所有字节输入流的抽象父类型
在这里插入图片描述
InputStream 中核心的三个read方法

//每次读一个字节,返回值是本次读取的字节值
 public abstract int read() throws IOException;
//每次读多个字节,并存放到指定的字节数组中,返回值是本次一共读取了多个字节(字节数)
 public int read(byte b[]) throws IOException {    
 return read(b, 0, b.length); 
 }
//每次读多个字节,并存放到指定的字节数组中,返回值是本次一共读取了多个字节(字节数) //同时可以指定从数组的什么位置开始存放,以及在数组中多存放多个字节 public int read(byte b[], int off, int len) throws IOException {
    if (b == null) {
            throw new NullPointerException();
                } else if (off < 0 || len < 0 || len > b.length - off) {        
                throw new IndexOutOfBoundsException();
                    } else if (len == 0) { 
                           return 0;    
                           }
    int c = read();    
    if (c == -1) { 
           return -1;
               }   
                b[off] = (byte)c;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
注意, InputStream 中的 skip 方法,可以让我们先跳过指定的字节数,再开始读数据
 
java.io.OutputStream 是所有字节输出流的抽象父类型:
 
OutputStream 中核心的三个write方法:
    int i = 1;   
     try {
             for (; i < len ; i++) 
               c = read(); 
               if (c == -1) {
               break;
                           }
             b[off + i] = (byte)c;
             } 
                } catch (IOException ee) { 
                   }    
                   return i;
                    }

java.io.OutputStream 是所有字节输出流的抽象父类型:
在这里插入图片描述
OutputStream 中核心的三个write方法:

//写出去一个字节值 
public abstract void write(int b) throws IOException;
//把一个自己数组中的值全部写出去 
public void write(byte b[]) throws IOException {
    write(b, 0, b.length); 
    }
//写出字节数组,指定开始位置,以及写出的字节数量 
public void write(byte b[], int off, int len) throws IOException {    if (b == null) {        
throw new NullPointerException();    
} else if ((off < 0) || (off > b.length) || (len < 0) ||               ((off + len) > b.length) || ((off + len) < 0)) { 
       throw new IndexOutOfBoundsException();
          } else if (len == 0) { 
                 return;    
                 }    
                 for (int i = 0 ; i < len ; i++) {
                         write(b[off + i]);   
                          } 
                          }

一般情况,使用字节流来操作数据的时候,往往是使用一对,一个字节输入流,负责读取数据, 一个字节输出流,负责将数据写出去,而这些流都将是 InputStream 和 ==OutputStream ==的子类 型
在代码中,使用流操作数据的的基本步骤是:

  1. 声明流
  2. 创建流
  3. 使用流
  4. 关闭流

注意,基本所有流的使用,都是这个套路

4.2 控制台

使用字节流,从控制台读取数据,以及向控制台中写数据。

//The "standard" input stream. 
public final static InputStream in = null;
//The "standard" output stream. 
public final static PrintStream out = null;

PrintStream 是 == OutputStream== 的子类型

public class Test {
    public static void main(String[] args) {
        //1.声明流       
         InputStream in = null;      
           OutputStream out = null;
        //2.创建流,这里使用System中已经创建好的流对象
                in = System.in;       
                 out = System.out;
        //3.使用流
                int data = -1;
                        try { 
                        data = in.read();
                        out.write(data);
                       out.flush();
                       //刷新缓冲区,强制所有数据写出去
                               } catch (IOException e) { 
                               e.printStackTrace();
                                    }finally {
                                     //4.关闭流
                                     if(in!=null) {
                                     try {
                                     in.close();
                                     } catch (IOException e) {
                                     e.printStackTrace();
                                     }
                                     }
            if(out!=null) {
             try { out.close();
              } catch (IOException e) { 
              e.printStackTrace();
               }      
            
             }
        }
    }
}
             



这里是一次读取用一个字节,然后把字节值输出,也可以一次读取多个字节,然后将本次读取到 的都输出

注意,这个子类中重写的read方法,会让线程阻塞,等待用户在控制台中的输入,用户输入并按 下回车,程序中的read方法就从阻塞状态恢复过来,从而读取到用户输入的内容

紫光同创PGL50H开发板实战:盘古50KH视频板的多媒体处理与高速通信方案 本文详细介绍了基于紫光同创PGL50H FPGA芯片的盘古50KH视频开发板在多媒体处理与高速通信方面的实战应用。文章从开发板硬件架构解析入手,逐步指导开发环境搭建、DDR3内存控制器配置、HDMI视频输入输出实战,并重点探讨了利用板载HSST高速收发器实现光纤通信与万兆以太网的方案。最后,通过构建一个集多路视频采集、处理与光纤传输于一体的系统案例,展示了该开发板在高性能实时数据处理领域的强大潜力。 阅读详情

相关推荐

Vivado 2018.3实战:用IDELAYE3和ISERDESE3搞定高速ADC数据采集(附仿真源码)

本文详细介绍了在Vivado 2018.3中使用Xilinx UltraScale架构的IDELAYE3和ISERDESE3原语实现高速ADC数据采集的实战方法。通过分析5GHz采样系统的时序挑战,提供从PCB布局到Vivado实现的完整解决方案,包括精密时序校准、多相位数据重组及系统级调试技巧,并附赠仿真源码助力工程师快速掌握高速数据采集技术。

weixin_30567225的博客 582

Java IO最详解,欢迎提出意见

Java IO 详解 初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂。而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见。 首先看个图:(如果你也是初学者,我相信你看了真个人都不好了,想想java设计者真是煞费苦心啊!)   这是java io 比较基本的一些处理流,除此之外我们还会...

DavidIsOK 5761

Mac安装Weblogic教程

1.Weblogic的下载 这次安装的是最新版本12 官网下载地址: http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html 下载需要登录账号,如没有账号要注册一个 下载后的文件如下图,其中fmw_12.2.1.3.0_wls_quick.jar文件就是安装包了,注意现在不要对它进行解压 2.安装前的确...

weixin_40102675的博客 5061

线程池优雅关闭的哲学

以字符的形式读取或者写入数据,从而避免一些编码问题。utf8:英文一个字节,一个中文占3个字节。unicode:无论中文英文都占2个字节。gbk:一个英文1个字节,中文2个字节。

禅与计算机程序设计的艺术 901

CTF全能工具箱ProV2:集成AI与94GB离线资源库,打造无网环境下的智能解题流水线

CTF全能工具箱ProV2是一款专为线下CTF比赛设计的All-in-One离线解决方案。它集成了94GB的庞大离线资源库,涵盖Web、逆向、Pwn等全方向工具链与知识库,并创新性地内置了本地AI大模型,可在断网环境下提供智能解题辅助,实现从信息收集到漏洞利用的智能流水线作业,极大提升比赛效率。

weixin_29240343的博客 422

Uds诊断自动化(CANoe.diva应用)

(7)其他配置选择可以保持默认(一般情况下,DTC以及31服务、下载服务需要另外测试)。(1)打开CANoe.Diva软件,并新建Diva工程。(2)设置工程名和保存位置;在"Specification file"(3)测试案例打开后的界面如下,可以对要进行测试的案例进行勾选,(可查看下角的进度条)后;(3)等待DIva工程的生成;(4)接下来是修改Diva工程选项,如下图点击。,如用例间的时间间隔、复位等待时间等。,即可打开导入的测试工程。,即可生成测试用例。(1)在CANoe中。

LIUJIAAAAA的博客 3434

Java基础-IO

文件:文件就是储存数据的地方文件流:文件在程序中是以流的形式来操作的输入流:把文件的数据读入到内存中输出流:把内存中的程序写到文件中。

weixin_52535099的博客 212

模拟IC版图DRC实战:手把手教你搞定MIM电容天线错误和ESD.10g违例

本文深入解析模拟IC版图中的MIM电容天线错误和ESD.10g违例问题,提供从错误解码到实战修复的完整指南。通过电路图修改、版图优化和验证闭环等步骤,帮助工程师高效解决DRC错误,特别适用于ADC等精密模拟电路设计。文章还分享了高级排错技巧和预防性设计策略,大幅提升流片成功率。

weixin_27697385的博客 293

Java-IO流基础知识

Java的IO流

ggggggzzzzz的博客 1034

matlab 求解多项式的根 四种方法

matlab 求解多项式的根 四种方法 方法一 %多项式求根函数roots p=[1,-3,1];%建立多项式系数向量p x=roots(p)%求多项式的根 x=-5:0.1:5;%步长为0.1 y1=x.*x-3*x+1;%构建一个函数 y2=zeros(size(x));%产生一个与x同大小的零向量 plot(x,y1,x,y2); 方法二 %利用函数fzero f=@(x)x*x-3*x+1; x1=fzero(f,0.5) x2=fzero(f,2.5) 方法三 %利用f

weixin_57038822的博客 1万+

详解舵机的基本原理以及控制方法

文章目录什么是舵机?伺服控制硬件连接舵机规格SG90MG90SMG996R总结 什么是舵机? 舵机是伺服电机的一种,伺服电机就是带有反馈环节的电机,我们可以通过伺服电机进行精确的位置控制或者输出较高的扭矩; 舵机也叫也叫 RC 伺服器,通常用于机器人项目,也可以在遥控汽车,飞机等航模中找到它们。 类似舵机这样的伺服系统通常由小型电动机,电位计,嵌入式控制系统和变速箱组成。 电机输出轴的位置由内部电位计不断采样测量,并与微控制器(例如STM32,Arduino)设置的目标位置进行比较; 根据相应的偏差,控制

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 4万+

Java基础之IO

常见io流,以及socket网络编程

THEFAKERS的博客 727

uni-app - 最详细 H5 网页接入微信登录功能,提供公众号配置与详细注释示例代码(移动端网页实现点击登录按钮后 调用微信公众号授权登录功能 详细讲解接入流程与详细示例代码)官方最新超级详细教程

uniapp中H5微信登录,uniapp H5微信授权登录,微信公众号第三方网页(H5)授权登录(OAuth2.0)流程及逻辑详细教程,UNIAPP 开发H5 怎么实现微信公众号登录功能,uniapp如何实现H5网页的公众号微信登录,怎么做uniapp微信登录,uniapp h5项目怎么实现微信登录的功能,uniapp微信浏览器H5授权微信登录,UniApp开发H5接入微信登录的全过程,uniapp的H5页面使用微信登录,uniapp H5微信授权登录,H5之微信授权登陆 (uniapp网页版微信授权登录)

🏆 前端领域优质创作者 7404

Java IO流之IO流基础

IO流介绍 IO基础之File类 IO流之字符流 IO流之字节流 IO流之Scanner类

Mr.mooye 2847

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java基础——IO流

是字节输入流,用于从文件中读取字节数据。int data;= -1) {

2403_87486006的博客 795

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【Java IO流】IO流详解

IO,即InputOutput,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括磁盘文件、管道、网络连接Java中是通过流处理IO的,那么什么是流?流(Stream),是一个抽象的概念,是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道当Java程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是磁盘文件、内存、网络连接等等。类似地,当Java程序需要写入数据的时候,就会开启一个通向目的地的流。

m0_55908255的博客 1692

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java基础IO流

Java基础IO流

qq_52957637的博客 1665

Java——IO流

存储和读取数据的解决方案IO流和File是息息相关的。

pangyaqi的博客 1707

Java-IO流基础

当程序需要读取数据源的数据时,就会通过IO流对象开启一个通向数据源的流,通过这个IO流对象的相关方法可以顺序读取数据源中的数据。IO流相当于一个管道。

2402_88479893的博客 1106

java中的IO流

如果new的File对象所表示的文件或目录并不存在,那么并不会应位new了一个File对象,操作系统就在对应的路径下创建所对应的文件和目录,它仅仅是在JVM的堆中new了一个File对象而已。java为了避免这种类型安全性问题的发生,使序列化接口类在每次编译时,自动生成一个序列化版本ID,用以区别不同的版本,当序列化和反序列化的版本不一致时,就会失败,抛出异常。然而,有些修改并不影响对象的反序列化,如类中加入了新的实例变量,而序列化的数据中并没有新实例变量的值,那么它在反序列化的过程中可以使默认值。

冲出仁川,走出马德里,故事还会再继续 2525

java——IO流基础

# IO流 用于读写数据的数据流 (可以读写磁盘文件,或网络中的数据..) ## IO流的四大分类: * 字节输入流:以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到內存中去的流 * 字节输出流:以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流。 * 字符输入流:以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流。 * 字符输出流:以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流。

不愿意做鱼的小鲸鱼の博客 915

【Java基础】IO流总结

一、流的概念: Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在java中把不同的输入/输出源(键盘、文件、网络连接等)抽象表述为“流”(stream)。通过流的方式允许Java程序使用相同的方式来访问不同的输入/输出源。stream是从起源(source)到接收(sink)的有序数据。 Java把所有传统的流类型(类或抽象类)都放在...

心似烟火 322

java io流_Java——IO流超详细总结

该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。在初学Java时,IO流是我遇到的一个很头疼的东西,Java IO 体系看起来类很多,感觉很复杂,但其实是 IO 涉及的因素太多了。在设计 IO 相关的类时,编写者也不是从同一个方面考虑的,所以会给人一种很乱的感觉,并且还...

weixin_39838362的博客 2162

Java IO流

Java IO 也称为IO流,IO = 流,它的核心就是对文件的操作,对于 字节 、字符类型的输入和输出流。 IO是指对数据流的输入和输出,也称为IO流,IO流主要分为两大类,字节流和字符流。字节流可以处理任何类型的数据,如图片,视频等,字符流只能处理字符类型的数据。 IO流的本质是数据传输,并且流是单向的。 常用的字节流FileInputStream、FileOutputStream、ObjectInputStream、ObjectOutputStream。 IO分阻塞型IO和非阻塞型IO(.

rmkloveme 1352

Java的IO流基础学习

Java的IO流基础学习流的简介流字节流字符流数据流缓存流对象流 本篇文章只对常用的Java流做基础介绍,主要是文件流,还会包括各种流之间的关系,对Java也是初学者水平,有错误希望大家指正。 流的简介 下面是总结的思维导图,可以先有个结构层次概念 当涉及到数据交互的时候,Java就使用流来实现。数据源可以是数据库、磁盘文件、网络数据等。 打个比喻,这是我对数据和流的理解,数据库就好比一个大水池,Java程序是希望用水做点事情的器具,像洗车喷头,高压水枪这些,要获取水就要与水之间有管道,这个管道在计算机的

WZQ的博客 410

Java之IO流

文章目录1、File1.1、File概述和构造方法1.2、File类创建功能1.3、File类判断和获取功能2、字节流3、字符流4、特殊操作流 1、File 1.1、File概述和构造方法 File:它是文件和目录路径名的抽象表示。 文件和目录是可以通过File封装成对象的。 对于File而言,其封装的并不是一个真正存大的文件,仅仅是一个路径名。它可以是存在的,也可以是不存在的。 方法名 说明 File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新

809
上一篇: TimeUnit的用法
下一篇: shell脚本修改服务器时间
平平无奇的编码小天才
博客等级 码龄6年 15粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值