JAVA IO教程

Java IO 是一套Java用来读写数据(输入和输出)的API。

java.io 包并没有涵盖所有输入输出类型。例如,并不包含GUI或者网页上的输入输出,这些输入和输出在其它地方都涉及,比如Swing工程中的JFC (Java Foundation Classes) 类,或者J2EE里的Servlet和HTTP包。

Java.io 包主要涉及文件,网络数据流,内存缓冲等的输入输出。

输入和输出 :

输入流可以理解为向内存输入,输出流可以理解为从内存输出。

Java的IO包主要关注的是从原始数据源的读取以及输出原始数据到目标媒介。以下是最典型的数据源和目标媒介:

  • 文件
  • 管道
  • 网络连接
  • 内存缓存
  • System.in, System.out, System.error(注:Java标准输入、输出、错误输出)

下面这张图描绘了一个程序从数据源读取数据,然后将数据输出到其他媒介的原理:

无标题1

流:

在Java IO中,流是一个核心的概念。流从概念上来说是一个连续的数据流。你既可以从流中读取数据,也可以往流中写数据。流与数据源或者数据流向的媒介相关联。在Java IO中流既可以是字节流(以字节为单位进行读写),也可以是字符流(以字符为单位进行读写)。

无标题2

Java IO类概述表:

Java IO中包含了许多InputStream、OutputStream、Reader、Writer的子类。这样设计的原因是让每一个类都负责不同的功能。这也就是为什么IO包中有这么多不同的类的缘故。各类用途汇总如下:

  • 文件访问
  • 网络访问
  • 内存缓存访问
  • 线程内部通信(管道)
  • 缓冲
  • 过滤
  • 解析
  • 读写文本 (Readers / Writers)
  • 读写基本类型数据 (long, int etc.)
  • 读写对象

当通读过Java IO类的源代码之后,我们很容易就能了解这些用途。这些用途或多或少让我们更加容易地理解,不同的类用于针对不同业务场景。

QQ截图20141020174145

文件:

在Java应用程序中,文件是一种常用的数据源或者存储数据的媒介。

读文件:

你可以根据该文件是二进制文件还是文本文件来选择使用FileInputStream或者FileReader。这两个类允许你从文件开始到文件末尾一次读取一个字节或者字符,或者将读取到的字节写入到字节数组或者字符数组。你不必一次性读取整个文件,相反你可以按顺序地读取文件中的字节和字符。

如果你需要跳跃式地读取文件其中的某些部分,可以使用RandomAccessFile。

写文件:

你可以根据你要写入的数据是二进制型数据还是字符型数据选用FileOutputStream或者FileWriter。你可以一次写入一个字节或者字符到文件中,也可以直接写入一个字节数组或者字符数据。数据按照写入的顺序存储在文件当中。

随机存储文件:

你可以通过RandomAccessFile对文件进行随机存取。

随机存取并不意味着你可以在真正随机的位置进行读写操作,它只是意味着你可以跳过文件中某些部分进行操作,并且支持同时读写,不要求特定的存取顺序。这使得RandomAccessFile可以覆盖一个文件的某些部分、或者追加内容到它的末尾、或者删除它的某些内容,当然它也可以从文件的任何位置开始读取文件。

获取文件信息:

你需要知道文件的大小和文件的属性。对于目录来说也是一样的,比如你需要获取某个目录下的文件列表。通过File类可以获取文件和目录的信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GRPC(Google Remote Procedure Call)是一种高性能、通用的开源 RPC 框架,可以在任何地方运行。它使得客户端和服务器应用程序可以透明地相互通信,而无需知道对方的语言和平台。在本教程中,我们将介绍如何使用Java实现简单的gRPC应用程序。 1. 安装gRPC 首先,您需要安装gRPC。请按照官方文档的说明进行安装:https://grpc.io/docs/languages/java/quickstart/ 2. 创建proto文件 接下来,您需要创建一个.proto文件,定义您的服务和消息格式。例如,以下是一个简单的例子: ``` syntax = "proto3"; option java_multiple_files = true; option java_package = "com.example.grpc"; option java_outer_classname = "HelloWorldProto"; service HelloWorld { rpc SayHello (HelloRequest) returns (HelloResponse) {} } message HelloRequest { string name = 1; } message HelloResponse { string message = 1; } ``` 这个.proto文件定义了一个名为HelloWorld的服务,该服务有一个名为SayHello的方法,该方法接受一个HelloRequest消息并返回一个HelloResponse消息。 3. 生成Java代码 使用gRPC的protobuf编译器,您可以生成Java代码以实现您的服务。在命令行中,运行以下命令: ``` protoc --java_out=<output_directory> <proto_file>.proto ``` 例如,如果您的.proto文件名为helloworld.proto,输出目录为src/main/java,那么您可以运行以下命令: ``` protoc --java_out=src/main/java helloworld.proto ``` 这将生成一个Java类,该类实现了您的服务和消息格式。 4. 实现服务 现在,您可以编写Java代码来实现您的服务。以下是一个简单的实现示例: ``` import io.grpc.Server; import io.grpc.ServerBuilder; import io.grpc.stub.StreamObserver; import com.example.grpc.*; import java.io.IOException; public class HelloWorldServer { private int port = 50051; private Server server; private void start() throws IOException { server = ServerBuilder.forPort(port) .addService(new HelloWorldImpl()) .build() .start(); System.out.println("Server started, listening on " + port); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { System.err.println("*** shutting down gRPC server since JVM is shutting down"); HelloWorldServer.this.stop(); System.err.println("*** server shut down"); } }); } private void stop() { if (server != null) { server.shutdown(); } } /** * Await termination on the main thread since the grpc library uses daemon threads. */ private void blockUntilShutdown() throws InterruptedException { if (server != null) { server.awaitTermination(); } } public static void main(String[] args) throws IOException, InterruptedException { final HelloWorldServer server = new HelloWorldServer(); server.start(); server.blockUntilShutdown(); } static class HelloWorldImpl extends HelloWorldGrpc.HelloWorldImplBase { @Override public void sayHello(HelloRequest request, StreamObserver<HelloResponse> responseObserver) { String message = "Hello " + request.getName() + "!"; HelloResponse response = HelloResponse.newBuilder().setMessage(message).build(); responseObserver.onNext(response); responseObserver.onCompleted(); } } } ``` 这个示例代码创建了一个名为HelloWorldServer的类,该类实现了您的服务。它使用ServerBuilder来创建服务器,并将服务添加到服务器中。当服务器启动时,它将打印一条消息,并将关闭挂钩添加到运行时中。当服务器关闭时,它将打印另一条消息。 服务的实现在HelloWorldImpl类中。它实现了您的服务定义中的SayHello方法,并使用请求中的名称构造响应消息。 5. 实现客户端 最后,您可以编写Java代码来实现客户端,以便使用您的服务。以下是一个简单的实现示例: ``` import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; import com.example.grpc.*; public class HelloWorldClient { private final ManagedChannel channel; private final HelloWorldGrpc.HelloWorldBlockingStub blockingStub; public HelloWorldClient(String host, int port) { channel = ManagedChannelBuilder.forAddress(host, port) .usePlaintext() .build(); blockingStub = HelloWorldGrpc.newBlockingStub(channel); } public void shutdown() throws InterruptedException { channel.shutdown().awaitTermination(5, TimeUnit.SECONDS); } public void greet(String name) { HelloRequest request = HelloRequest.newBuilder().setName(name).build(); HelloResponse response = blockingStub.sayHello(request); System.out.println(response.getMessage()); } public static void main(String[] args) throws Exception { HelloWorldClient client = new HelloWorldClient("localhost", 50051); try { String user = "world"; if (args.length > 0) { user = args[0]; /* Use the arg as the name to greet if provided */ } client.greet(user); } finally { client.shutdown(); } } } ``` 这个示例代码创建了一个名为HelloWorldClient的类,该类连接到服务器并调用您的服务。它使用ManagedChannelBuilder来创建一个通道,并将其用于创建一个HelloWorldGrpc.HelloWorldBlockingStub,该stub可以用于调用您的服务。它还定义了一个greet方法,该方法接受一个名称并调用您的服务,然后打印响应消息。 6. 运行您的应用程序 现在,您可以运行您的应用程序。首先启动服务器: ``` $ java HelloWorldServer ``` 然后启动客户端: ``` $ java HelloWorldClient ``` 您应该能够看到客户端打印出“Hello world!”(如果您没有提供名称参数)或“Hello <name>!”(如果您提供了名称参数)。 这就是如何在Java中使用gRPC创建简单的客户端-服务器应用程序的介绍。希望这个教程能够帮助您入门gRPC。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值