- 博客(321)
- 资源 (6)
- 收藏
- 关注
原创 mardwon测试看看
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command + S
2022-08-09 17:40:49
236
原创 Maven 指定 Java 编译版本
Maven使用的默认Java编译器版本是Java 1.5。为了使Maven使用Java编译器的较新版本编译Java代码,需要在项目的POM文件(pom.xml)中显式指定Java编译器。指定Java编译器版本的确切方式取决于你使用的是Java 8或更早版本,还是Java 9或更高版本。从Java 9开始,Java获得了一些模块,这些模块在短期内会使编译有些复杂,但从长期来看应该会有所帮助。1.适用于Java 8和更早版本的Maven Java编译器从Java 8和更早版本开始,有两种方法可.
2020-07-24 10:34:28
1301
原创 Maven常用命令解析
Maven包含一系列可以执行的命令。 Maven命令是构建生命周期,构建阶段和构建目标的混合体,因此可能会有些混乱。我将在本教程中描述常见的Maven命令,并说明它们执行的生命周期,阶段和目标。1.Maven命令结构Maven命令包含两个元素:mvn一个或多个构建生命周期,构建阶段或目标一个Maven命令示例:mvn clean该命令由执行Maven的mvn命令以及名为clean的构建生命周期组成。这是另一个Maven命令示例:mvn cl...
2020-07-23 11:19:33
367
原创 用Maven构建 Fat JAR
Maven可以将你的Java项目构建成一个Fat JAR。 Fat JAR是一个单个JAR文件,其中包含项目中所有已编译的Java类以及项目所依赖的所有JAR文件。当你需要构建可执行的JAR文件时,Fat JAR会很方便。如:微服务。你可以将你的微服务及其所有依赖项打包到一个JAR文件中。这使执行变得更加容易,因为你不必在类路径中列出微服务所依赖的所有JAR文件,这简化了启动微服务的命令。如果你需要将应用程序打包在Docker容器中,Fat JAR也很方便。无需将应用程序依赖的每个JAR文件添加到D
2020-07-21 15:09:47
2659
原创 Maven教程:Hello World
在本教程中,我将创建第一个Maven项目,可以说是Maven Hello World项目。创建Maven项目意味着创建POM文件和标准目录布局。实际上,该项目并不是真正的“ Maven项目”,它只是一个用Maven构建的Java项目。注意:这里默认你已成功安装Maven。1.创建项目目录确保已安装Maven后,请在硬盘上的某个位置创建一个新目录。该目录将是你的第一个Maven项目的根目录。2.创建pom.xml文件创建项目根目录后,请在目录内创建一个名为pom.xml的文..
2020-07-20 17:56:26
819
原创 Java NIO AsynchronousFileChannel 异步读写文件
在Java 7中,AsynchronousFileChannel已添加到Java NIO。 AsynchronousFileChannel使异步读写文件成为可能。接下来将说明如何使用AsynchronousFileChannel。1.创建一个AsynchronousFileChannel可以通过其静态方法open()创建一个AsynchronousFileChannel:Path path = Paths.get("data/test.xml");AsynchronousFileCha.
2020-07-17 15:37:12
912
原创 Java NIO Files 的常用方法
Java NIO Files类(java.nio.file.Files)提供了几种操作文件的方法,这里介绍一些最常用的方法。java.nio.file.Files类可与java.nio.file.Path实例一起使用,因此在使用Files类之前,需要了解Path类。1.Files.exists()Files.exists()方法检查文件系统中是否存在给定的Path。如果你打算创建一个新目录,则首先要创建相应的Path实例,然后再创建目录。由于Path实例可能会指向文件系统中不存在..
2020-07-16 17:24:20
1531
原创 Java NIO vs. IO
在学习了Java NIO和IO API时,很快就会想到一个问题:什么时候应该使用IO,什么时候应该使用NIO?在本文中,我将尝试阐明Java NIO和IO之间的差异,它们的用例以及它们如何影响代码的设计。1.Java NIO和IO的主要区别下表总结了Java NIO和IO之间的主要区别。IO NIO 面向流 面向Buffer 阻塞IO 非阻塞IO Selectors 2.面向流 vs 面向缓冲区Java NIO和IO之间的第一个大...
2020-07-15 11:08:57
201
1
原创 Java NIO Pipe
Java NIO Pipe是两个线程之间的单向数据连接,Pipe具有source channel和sink channel。写数据到sink channel,然后可以从source channel读取此数据。这是Pipe原理的说明:1.创建Pipe可以通过调用Pipe.open()方法来打开Pipe:Pipe pipe = Pipe.open();2.写数据到Pipe要写入Pipe,需要访问sink channel:Pipe.SinkChannel s...
2020-07-14 09:53:43
192
原创 Java NIO DatagramChannel
Java NIO DatagramChannel是可以发送和接收UDP数据包的通道,由于UDP是无连接的网络协议,因此默认情况下,不能像从其他通道一样对DatagramChannel进行读写,但可以发送和接收数据包。1.打开DatagramChannelDatagramChannel channel = DatagramChannel.open();channel.socket().bind(new InetSocketAddress(9999));本示例打开一个Datagra..
2020-07-13 17:22:57
178
原创 Java NIO ServerSocketChannel
Java NIO ServerSocketChannel是一个监听传入的TCP连接的通道,就像标准Java Networking中的ServerSocket一样。 ServerSocketChannel类位于java.nio.channels包中。一个例子:ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();serverSocketChannel.socket().bind(new InetSocketAdd
2020-07-07 14:24:14
162
原创 Java NIO SocketChannel
Java NIO SocketChannel是连接到TCP Socket的Channel,它等效于Java Networking Socket。有两种创建SocketChannel的方法:打开一个SocketChannel并连接到服务。当传入的连接到达ServerSocketChannel时,创建SocketChannel。1.打开一个SocketChannel这是打开SocketChannel的方法:SocketChannel socketChannel = SocketCh..
2020-07-06 10:47:17
216
原创 Java NIO FileChannel
Java NIO FileChannel是连接到文件的Channel。使用文件Channel,你可以从文件读取数据,也可以将数据写入文件。 Java NIO FileChannel类是标准Java IO API的一种替代方式。无法将FileChannel设置为非阻塞模式,它始终以阻止模式运行。1.打开一个FileChannel在使用FileChannel之前必须打开它。你不能直接打开FileChannel,需要通过InputStream,OutputStream或RandomAcces.
2020-07-02 10:57:36
196
原创 Java NIO Selector
Java NIO Selector是一个组件,可以检查一个或多个Java NIO Channel实例,并确定那些通道可供使用,read或write。这样,单个线程可以管理多个Channel,从而可以管理多个网络连接。1.为什么要使用Selector?仅使用单个线程来处理多个Channel的优点是:只需要更少的线程来处理Channel。实际上,你可以使用一个线程来处理所有Channel。线程之间的切换对于操作系统而言是昂贵的,并且每个线程也占用操作系统中的一些资源(内存)。因此,使用的线程越少越.
2020-07-01 11:13:02
182
原创 Java NIO Channel 与 Channel 之间的传输
在Java NIO中,如果其中一个通道是FileChannel,则可以将数据直接从一个通道传输到另一个通道。 FileChannel类具有transferTo()和transferFrom()方法,该方法可以完成此操作。1.transferFrom()FileChannel.transferFrom()方法将数据从源通道传输到FileChannel。这是一个简单的示例:RandomAccessFile fromFile = new RandomAccessFile("fromFile.t.
2020-06-30 16:05:06
214
原创 Java NIO Scatter 和 Gather
Java NIO带有内置的scatter和gather支持。scatter和gather是在读取和写入Channel中使用的概念。从Channel的scatter read是将数据读取到多个缓冲区。因此,将数据从通道“分散”到多个缓冲区中。gather write到Channel是一种写操作,它将来自多个缓冲区的数据写到单个Channel中。因此,将来自多个缓冲区的数据“收集”到一个通道中。在需要分别处理传输数据的各个部分的情况下,scatter和gather可能非常有用。例如,如果消息由标题和
2020-06-29 10:04:44
214
原创 Java NIO Channel
Java NIO ChannelJava NIO通道类似于流,但有一些区别:你可以从Channel中读取数据,也可以写数据到Channel。流通常是单向的(读或写)。 Channel可以异步读写。 Channel始终将数据读到Buffer或从Buffer写入。如上所述,你将数据从Channel读取到Buffer中,然后将数据从Buffer写入Channel中:2.Channel的实现以下是Java NIO中最重要的Channel实现:FileChannel Datagr.
2020-06-28 10:04:01
151
原创 Java NIO Buffer
与NIO Channel进行交互时,将使用Java NIO Buffer。前面提到过,数据从Channel读到Buffer,或从Buffer写到Channel。缓冲区本质上是一个内存块,可以在其中写入数据,然后在以后再次读取。该内存块在NIO中封装成Buffer对象,该对象提供了一组方法,可以更轻松地使用该内存块。1.Buffer的基本使用使用Buffer读取和写入数据通常遵循以下四个步骤:写数据到 Buffer 调用buffer.flip() 从Buffer读取数据 调用..
2020-06-26 22:22:58
155
原创 Java NIO 中核心概念
Java NIO由以下核心组件组成:ChannelsBuffersSelectorsJava NIO本身有很多的类和组件,但是我认为Channel,Buffer和Selector构成了API的核心。其余的组件(例如Pipe和FileLock)仅是实用程序类,可以与这三个核心组件结合使用。因此,重点介绍这三个组件。1.Channels 和 BuffersChannel 有点像流。可以从Channel中将数据读到Buffer,也可以将数据从Buffer写到Channel:..
2020-06-24 10:38:07
170
原创 Java NIO 简介 - 基本概念
Netty 是基于 Java NIO 的封装。Java NIO(新IO)是Java的替代IO API(来自Java 1.4),意味着可以替代标准Java IO和Java Networking API。 Java NIO提供了与标准IO API不同的IO处理方式。1.Java NIO: Channels 和 Buffers在标准IO API中,你可以使用字节流和字符流。在NIO中,你可以使用通道和缓冲区。数据总是从通道读取到缓冲区,或从缓冲区写入到通道。2.Java NIO: No..
2020-06-23 16:14:31
149
1
原创 Java 非阻塞式通信中需要了解的概念:Future
Java 非阻塞式通信中需要了解的概念:FutureNetty 中ChannelFuture 和Promise 都是继承java.util.concurrent.Future,所以有必要好好总结一下。1.Future 的介绍、用途简而言之,Future表示异步计算的将来结果–在处理完成后最终会出现在Future中。耗时间运行的方法非常适合异步处理和Future接口。这使我们能够在等待Future中封装的任务完成之前执行其他一些操作。可以利用Future的异步特性的一些操作:...
2020-06-22 16:06:12
326
原创 Netty 中 Future 和 Promise 的区别
Future 和 Promise 是非常相似的概念,不同之处在于,Future 是针对尚不存在的结果的只读容器,而 Promise 可以被写入(通常只能写入一次)。可以将Java 8 CompletableFuture和SettableFuture视为 Promise,因为可以设置它们的值,但是它们也实现了Future接口,因此对于客户端而已它们没什么区别。Future 的结果由异步计算的结果确定。请注意,必须使用Callable或Runnable初始化FutureTask(经典的Future),没有无
2020-06-21 20:52:59
889
原创 Netty:测试 Encoder 和 Decoder
最近用了一段时间的Netty,现构建了一个编码器/解码器管道,以测试编码器和解码器在没有发送真实的消息时是否在正常工作。方便的是,Netty 有个EmbeddedChannel,使测试变得非常轻松。假设我们有一条消息“ Foo”,我们想通过网络发送。它仅包含一个整数值,因此我们将其发送并在另一侧重建“ Foo”。 我们可以编写以下编码器来执行此操作:public static class MessageEncoder extends MessageToMessageEncoder<F..
2020-06-20 20:35:20
574
原创 Netty 任务调度
Netty 中也可以进行任务调度。1.60秒后调用一次Channel channel = new LocalChannel();channel.eventLoop().schedule(() -> { System.out.println("60s!");}, 60, TimeUnit.SECONDS);2.每隔60秒调用一次ScheduledFuture sf = channel.eventLoop().scheduleAtFixedRate(() -&..
2020-06-19 15:34:34
726
原创 Netty SSL 验证实例
Netty 官方支持 SSL 验证,并自带有实例代码,下面代码示例基本源自官方 demo:1.服务端package com.learn.netty.ssl;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;imp.
2020-06-19 15:11:39
758
原创 Netty TCP Hello 实例
TCP ServerNetty的服务之一是TCP服务。要创建Netty TCP服务,必须:创建一个EventLoopGroup创建和配置ServerBootstrap创建一个ChannelInitializer启动服务器这是一个代码示例,显示了如何创建Netty TCP服务:EventLoopGroup group = new NioEventLoopGroup();try{ ServerBootstrap serverBootstrap = new ...
2020-06-18 19:53:04
254
原创 Netty 核心: ChannelPipeline
Netty ChannelPipeline是Netty中非常核心的概念。每个SocketChannel包含一个ChannelPipeline。 ChannelPipeline包含ChannelHandler实例的列表。当数据进入和写出SocketChannel时,将调用这些ChannelHandler实例。ChannelHandler接口具有两个子接口:ChannelInboundHandlerChannelOutboundHandler你可以将ChannelInboundHan..
2020-06-17 20:46:06
215
原创 Netty 几个重要的核心组件
为了了解Netty的工作原理,对Netty的内部设计有一个总体了解是很有用的。几个核心概念:BootstrapEventLoopGroupEventLoopSocketChannelChannelInitializerChannelPipelineChannelHandler这些概念如何相互关联如下所示:BootstrapNetty中的Bootstrap类负责引导,引导过程包括启动线程,打开套接字等。EventLoopGroupNetty...
2020-06-15 19:39:24
321
原创 Java Netty Codecs 程序
服务端定义了一个Handler和三个Decoder。Handler接收客户端的信息,然后传递给decoder过滤处理。1.服务端package com.learn.netty.codecs;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.E.
2020-06-15 11:13:46
210
原创 Java Netty Handler 程序
服务端定义了2个Handler,第一个Handler处理从客户端接收的数据并传递到第二个Handler。第二个Handler输出并返回给客户端。1.服务端package com.learn.netty.handler;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.n.
2020-06-15 10:29:48
226
原创 Java Netty Echo 程序
使用 Netty 实现的 Echo 程序:客户端发送信息,服务端原样返回。1.服务端package com.learn.netty.echo;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.EventLoopGroup;import io.
2020-06-15 10:19:29
181
原创 Java Netty 教程
Netty是用于Java的高性能IO工具包。 Netty是开源的,因此可以自由使用它,甚至可以为它做出贡献。该Netty教程将解释Netty的工作方式以及如何开始使用Netty。但本教程不会涵盖Netty的每一个细节。Netty官网Netty网站地址为:https://netty.io/Netty优势通常,与使用标准Java实现的应用程序相比,Netty使构建可扩展,强大的网络应用程序变得容易得多。 Netty还包含一些特定于操作系统的优化,例如在Linux上使用EPOLL等。...
2020-06-14 19:30:15
417
原创 收藏一些有用的开发类型、下载类型和工具类型网址
网站收藏集合:1.http://www.allitebooks.org/原版IT开发类书籍PDF下载网站,文件超清晰。2.https://convertio.co/zh/文件转换网站,支持图片格式转换、文档格式转换、小说格式转换、视频格式转换等。3.https://codebeautify.org/开发时会用到的各种在线工具,谁用谁知道。后续不定时更新!...
2020-06-14 16:12:42
10364
原创 Java 8 接口 接口中所有方法自动是 public ,所有接口中定义方法 public 关键字不是必须的。
Java 8 接口接口中所有方法自动是 public ,所有接口中定义方法 public 关键字不是必须的。
2020-06-09 22:33:57
755
原创 Java Comparable 接口
Comparable 接口 compareTo 方法应该兼容 equals 方法:当 x.equals(y) 时,x.compareTo(y) 应该等于 0。大多数类都是遵循这一原则。但典型的 BigDecimal 没有遵循假设 x = new BigDecimal("1.0") ,y = new BigDecimal("1.00")此时,x.equals(y) 等于 false,x.compareTo(y) 等于 0。带有继承关系的接口方法实现:class Employee im.
2020-06-09 22:31:55
160
原创 java fork任务为多个小任务以提升任务性能
在执行一个大任务时,可以将其fork为多个小任务,最后join得到结果。fork任务主要是要设置一个阀值THRESHOLD,不宜过小,也不宜过大,否则起不到提升性能的作用。package com.learn.corejava.threading;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.RecursiveTask;import java.util.function.DoublePredicat.
2020-06-08 16:31:58
193
原创 Java 以线程池的方式统计文件夹
上一篇文章中https://www.zhblog.net/go/java/tutorial/java8-future-task?t=590是使用多线程统计文件夹,每个文件夹新启一个线程统计。现引入线程池进行管理。package com.learn.corejava.threading;import java.io.File;import java.io.FileNotFoundException;import java.util.ArrayList;import java.util.L.
2020-06-08 16:20:40
219
pager-taglib分页
2014-03-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人