Data Streams支持 primitive 数据类型以及字符串类型的字节流I/O,所有的Data Stream 类都实现了DataInput 与DataqOutput 这两个接口,在实现这两个接口的类中最为常用是:DataInputStream,DataOutputStream。官方文档的例子:
package io.datastream; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.EOFException; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class DataStreams { static final String dataFile = "D:\\360云盘\\javase\\src\\io\\invoicedata"; static final double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 }; static final int[] units = { 12, 8, 13, 29, 50 }; static final String[] descs = { "Java T-shirt", "Java Mug", "Duke Juggling Dolls", "Java Pin", "Java Key Chain" }; public static void main(String[] args) throws IOException { DataOutputStream out = null; try { out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile))); for (int i = 0; i < prices.length; i++) { out.writeDouble(prices[i]); out.writeInt(units[i]); out.writeUTF(descs[i]); } } catch (Exception e) { e.printStackTrace(); } finally { if (out != null) { out.close(); } } // ========================= Read the file ============ DataInputStream in = null; double price; int unit; String desc; double total = 0.0; try { in = new DataInputStream(new BufferedInputStream(new FileInputStream(dataFile))); try { while (true) { price = in.readDouble(); unit = in.readInt(); desc = in.readUTF(); System.out.format("You ordered %d" + " units of %s at $%.2f%n", unit, desc, price); total += price * unit; } } catch (EOFException e) { e.printStackTrace(); } System.out.format("Total amount %.2f", total); } catch (Exception e) { e.printStackTrace(); } finally { in.close(); } } }
这段代码是先将3个分别存放着相同个数,不同primitive类型或字符串类型的数组的数据写到invoicedata文件中,然后再将这些数据从文件中读出。上面这段代码的运行结果为:
运行结果1:
You ordered 12 units of Java T-shirt at $19.99
You ordered 8 units of Java Mug at $9.99
You ordered 13 units of Duke Juggling Dolls at $15.99
You ordered 29 units of Java Pin at $3.99
You ordered 50 units of Java Key Chain at $4.99
java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at java.io.DataInputStream.readLong(DataInputStream.java:416)
at java.io.DataInputStream.readDouble(DataInputStream.java:468)
at io.datastream.DataStreams.main(DataStreams.java:51)
Total amount 892.88
You ordered 8 units of Java Mug at $9.99
You ordered 13 units of Duke Juggling Dolls at $15.99
You ordered 29 units of Java Pin at $3.99
You ordered 50 units of Java Key Chain at $4.99
java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at java.io.DataInputStream.readLong(DataInputStream.java:416)
at java.io.DataInputStream.readDouble(DataInputStream.java:468)
at io.datastream.DataStreams.main(DataStreams.java:51)
Total amount 892.88
上面得到的结果都是正常的,但是如果将上面的代码稍作改动:
package io.datastream; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.EOFException; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class DataStreams { static final String dataFile = "D:\\360云盘\\javase\\src\\io\\invoicedata"; static final double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 }; static final int[] units = { 12, 8, 13, 29, 50 }; static final String[] descs = { "Java T-shirt", "Java Mug", "Duke Juggling Dolls", "Java Pin", "Java Key Chain" }; public static void main(String[] args) throws IOException { DataOutputStream out = null; DataInputStream in = null; double price; int unit; String desc; double total = 0.0; try { out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile))); for (int i = 0; i < prices.length; i++) { out.writeDouble(prices[i]); out.writeInt(units[i]); out.writeUTF(descs[i]); } // ========================= Read the file ===================== in = new DataInputStream(new BufferedInputStream(new FileInputStream(dataFile))); try { while (true) { price = in.readDouble(); unit = in.readInt(); desc = in.readUTF(); System.out.format("You ordered %d" + " units of %s at $%.2f%n", unit, desc, price); total += price * unit; } } catch (EOFException e) { e.printStackTrace(); } System.out.format("Total amount %.2f", total); } catch (Exception e) { e.printStackTrace(); } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } } }
将读取文件的代码移动写入文件代码片段后面,而且是在同一个try里面,也就是在outputstream关闭之前读取,其结果:
相关推荐
你可以使用Java或Scala API编写Flink程序,也可以利用Table API和SQL进行更直观的编程。在资源包中,你可能会找到如何设置本地或集群环境,如何使用命令行工具提交作业,以及如何查看作业状态和日志的教程。 三、...
### Apache Flink DataStream API 教程:深入理解流处理技术 #### 一、概述 在本次教程中,我们将深入探讨 Apache Flink 的 DataStream API,这是一个强大的工具,用于实现高性能的大规模数据流处理任务。Flink 的...
"pytorch_datastream-0.3.8-py36-none-any.whl"正是这样一个专为PyTorch设计的数据流库,它旨在简化数据预处理和管理,提高数据处理的效率。 首先,我们要明确pytorch_datastream的核心功能。这个库提供了一种流式...
通过《Java I/O, 2nd Edition》的学习,开发者可以深入掌握Java I/O编程的方方面面,无论是数据的基本读写,还是网络通信、数据压缩、文件归档等高级I/O操作。这本书为Java I/O操作提供了全面而深入的指南,是Java...
本资源“datastream-0.1.1.tar.gz”是从Python的官方软件包索引(PyPI)获取的,它是一个名为"datastream"的Python库的版本0.1.1的压缩包。 首先,让我们了解一下PyPI(Python Package Index)。PyPI是Python开发者...
@ auroradao / datastream-client 此monorepo提供了必要的程序包,可轻松将Javascript / Typescript应用程序连接到IDEX Datastream API。 它包括各种连接器,可让您根据您的环境选择最佳的WebSocket实现。 客户端...
在本教程中,我们将深入探讨"flink-java-本地例子"这一主题,它涉及Apache Flink的Java API以及如何在本地环境中运行Flink程序。Apache Flink是一个强大的开源流处理和批处理框架,广泛用于实时数据处理。我们将讨论...
vicon-datastream-sdk 具有cmake支持的非正式VICON DataStream SDK 从1.8.0版开始,VICON DataStream SDK在MIT许可下可用。 这个非正式的分支包含SDK以及对cmake构建系统的支持,可轻松集成到基于cmake的项目中。 您...
包括java8,es,flink等学习(java和scala,可以阅读源码) 见: flink-table-common:通过自定义函数、格式等扩展表生态系统的通用模块。 flink-table-api-java:使用 Java 开发 Table & SQL API 依赖(早期开发...
阿里云Blink DataStream开发,集成datahub,通过blink 获取datahub相关数据,将数据进行转化成对象,由于实时数据是binlog日志,所以对数据进行过滤,数据输出时需要将对象转化成json对象提供给下游,所以集成了...
《Flink学习精要-Java版-最终修订版》 Flink,作为Apache软件基金会旗下的一个开源大数据处理框架,自其诞生以来,便受到了广泛关注,特别是在国内,以阿里巴巴为代表的互联网巨头对其投入了大量的研发资源,使其...
Flink 学习笔记 Apache Flink 是近年来越来越流行的一款开源大数据计算引擎,它同时支持了批处理和流处理。Flink 的主要特点是它可以实时处理大规模数据,并且可以与其他大数据处理工具集成,例如 Hadoop、Spark 等...
在Java中,IO流的概念首次被引入是为了方便数据在不同源和目的地之间流动,它将各种I/O操作抽象为流的形式。本章节将深入探讨Java IO流的基本原理、分类以及常用类。 首先,让我们了解什么是流。在计算机科学中,...
基于Flink CDC使用datastream方式全量增量同步mysql to mysql 使用的是java语言,只需配置完源数据库和目标数据库信息,运行MysqlCDC中的main函数,即可实现多库多表同步。
总的来说,这个压缩包可能是一个学习和参考Datastream7i EAM系统的资源集合,包括可能的培训材料、实用指南以及可能的案例分析。用户可以通过这些资料深入理解Datastream7i的功能,了解如何有效地实施和利用EAM策略...
a1.sinks.k1.hdfs.fileType=DataStream a1.sinks.k1.hdfs.rollCount=0 ``` 这里的配置中,`%{type}` 表示根据日志类型将数据写入不同的HDFS路径下;`%Y%m%d` 表示根据日期动态创建文件夹,这样可以方便地按照日期对...
javac DataStream.java javac Row.java 然后您可以通过以下方式启动 ECL: ecl run data-stream.ecl --target hthor --server=localhost:8010 您应该看到以下输出: <Row><value>row</value></Row> <Row>...
**Flink(Java)笔记** 在大数据处理领域,Apache Flink是一个开源的流处理和批处理框架,以其高效、实时和容错性而备受推崇。本笔记将专注于使用Java API来操作Flink,以帮助开发者深入理解其核心概念和功能。 ### ...
在IT领域,特别是企业级数据管理与集成解决方案中,Datastream Systems, Inc.是一家领先的公司,其旗舰产品Datastream 7i(以下简称DS7i)是行业内的佼佼者。根据给定文件的信息,我们可以深入探讨DS7i的概述、功能...