
java
wwwcomcn123
这个作者很懒,什么都没留下…
展开
-
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 · 1405 阅读 · 0 评论 -
Maven常用命令解析
Maven包含一系列可以执行的命令。 Maven命令是构建生命周期,构建阶段和构建目标的混合体,因此可能会有些混乱。我将在本教程中描述常见的Maven命令,并说明它们执行的生命周期,阶段和目标。1.Maven命令结构Maven命令包含两个元素:mvn一个或多个构建生命周期,构建阶段或目标一个Maven命令示例:mvn clean该命令由执行Maven的mvn命令以及名为clean的构建生命周期组成。这是另一个Maven命令示例:mvn cl...原创 2020-07-23 11:19:33 · 423 阅读 · 0 评论 -
用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 · 2785 阅读 · 0 评论 -
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 · 895 阅读 · 0 评论 -
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 · 1010 阅读 · 0 评论 -
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 · 1703 阅读 · 0 评论 -
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 · 241 阅读 · 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 · 236 阅读 · 0 评论 -
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 · 220 阅读 · 0 评论 -
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 · 209 阅读 · 0 评论 -
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 · 260 阅读 · 0 评论 -
Java NIO Selector
Java NIO Selector是一个组件,可以检查一个或多个Java NIO Channel实例,并确定那些通道可供使用,read或write。这样,单个线程可以管理多个Channel,从而可以管理多个网络连接。1.为什么要使用Selector?仅使用单个线程来处理多个Channel的优点是:只需要更少的线程来处理Channel。实际上,你可以使用一个线程来处理所有Channel。线程之间的切换对于操作系统而言是昂贵的,并且每个线程也占用操作系统中的一些资源(内存)。因此,使用的线程越少越.原创 2020-07-01 11:13:02 · 230 阅读 · 0 评论 -
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 · 303 阅读 · 0 评论 -
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 · 265 阅读 · 0 评论 -
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 · 200 阅读 · 0 评论 -
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 · 188 阅读 · 0 评论 -
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 · 267 阅读 · 0 评论 -
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 · 191 阅读 · 1 评论 -
Java 非阻塞式通信中需要了解的概念:Future
Java 非阻塞式通信中需要了解的概念:FutureNetty 中ChannelFuture 和Promise 都是继承java.util.concurrent.Future,所以有必要好好总结一下。1.Future 的介绍、用途简而言之,Future表示异步计算的将来结果–在处理完成后最终会出现在Future中。耗时间运行的方法非常适合异步处理和Future接口。这使我们能够在等待Future中封装的任务完成之前执行其他一些操作。可以利用Future的异步特性的一些操作:...原创 2020-06-22 16:06:12 · 386 阅读 · 0 评论 -
Netty 中 Future 和 Promise 的区别
Future 和 Promise 是非常相似的概念,不同之处在于,Future 是针对尚不存在的结果的只读容器,而 Promise 可以被写入(通常只能写入一次)。可以将Java 8 CompletableFuture和SettableFuture视为 Promise,因为可以设置它们的值,但是它们也实现了Future接口,因此对于客户端而已它们没什么区别。Future 的结果由异步计算的结果确定。请注意,必须使用Callable或Runnable初始化FutureTask(经典的Future),没有无原创 2020-06-21 20:52:59 · 975 阅读 · 0 评论 -
Netty:测试 Encoder 和 Decoder
最近用了一段时间的Netty,现构建了一个编码器/解码器管道,以测试编码器和解码器在没有发送真实的消息时是否在正常工作。方便的是,Netty 有个EmbeddedChannel,使测试变得非常轻松。假设我们有一条消息“ Foo”,我们想通过网络发送。它仅包含一个整数值,因此我们将其发送并在另一侧重建“ Foo”。 我们可以编写以下编码器来执行此操作:public static class MessageEncoder extends MessageToMessageEncoder<F..原创 2020-06-20 20:35:20 · 646 阅读 · 0 评论 -
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 · 792 阅读 · 0 评论 -
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 · 839 阅读 · 0 评论 -
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 · 320 阅读 · 0 评论 -
Netty 核心: ChannelPipeline
Netty ChannelPipeline是Netty中非常核心的概念。每个SocketChannel包含一个ChannelPipeline。 ChannelPipeline包含ChannelHandler实例的列表。当数据进入和写出SocketChannel时,将调用这些ChannelHandler实例。ChannelHandler接口具有两个子接口:ChannelInboundHandlerChannelOutboundHandler你可以将ChannelInboundHan..原创 2020-06-17 20:46:06 · 267 阅读 · 0 评论 -
Netty 几个重要的核心组件
为了了解Netty的工作原理,对Netty的内部设计有一个总体了解是很有用的。几个核心概念:BootstrapEventLoopGroupEventLoopSocketChannelChannelInitializerChannelPipelineChannelHandler这些概念如何相互关联如下所示:BootstrapNetty中的Bootstrap类负责引导,引导过程包括启动线程,打开套接字等。EventLoopGroupNetty...原创 2020-06-15 19:39:24 · 372 阅读 · 0 评论 -
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 · 244 阅读 · 0 评论 -
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 · 296 阅读 · 0 评论 -
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 · 221 阅读 · 0 评论 -
Java线程内部存储
package com.learn.corejava.threading;import java.text.SimpleDateFormat;import java.util.Date;public class LocalThreadMain { public static void main(String[] args) { ThreadLocal<SimpleDateFormat> localFormatter = ThreadLocal.withInit.原创 2020-06-08 15:57:40 · 206 阅读 · 0 评论 -
java 线程池快速创建使用
package com.learn.corejava.threading;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.ThreadPoolExecutor;public class ThreadPoolMain { public static void main(String[] args) { .原创 2020-06-08 15:49:38 · 289 阅读 · 0 评论 -
openfire 包路由 PacketRouter
处理所有的传入的数据包@Overridepublic void route(IQ packet) { iqRouter.route(packet);}@Overridepublic void route(Message packet) { messageRouter.route(packet);}@Overridepublic void route(Presence packet) { presenceRouter.route(packet);}实..原创 2020-06-04 16:16:57 · 289 阅读 · 0 评论 -
Java 线程 Interrupt 方法
Thread t = new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { System.out.println(Thread.currentThread().isInterrupted()); try { Thread.sleep(1000); } catc.原创 2020-05-20 09:59:09 · 160 阅读 · 0 评论 -
Java 8 集合(未完)
Vector 所有方法都是 synchronized 的,比较耗时。单线程程序中,应使用 ArrayList。原创 2020-05-15 17:36:13 · 140 阅读 · 0 评论 -
Java 泛型各种情况实例
Pair<String> p1 = new Pair<>("JR", "SM");Pair<Employee> p2 = new Pair<>(new Employee("a", 10), new Employee("b", 20));System.out.println(p1.getClass() == p2.getClass());仅检查是否为 Pair 类型。package com.learn.corejava.generic...原创 2020-05-13 17:48:33 · 839 阅读 · 0 评论 -
Java 各种实践代码,系列教程
JavaJava 2D games tutorial Java 2D tutorial Java Future tutorial Java Comparable and Comparator Java DOM tutorial Java MVC tutorial Java SAX tutorial Java JAXB tutorial Java JSON Processing ...原创 2020-05-08 17:12:41 · 341 阅读 · 0 评论 -
Spring 与 Mybatis 的初步集成:xml 方式
原文地址:https://www.zhblog.net/go/java/spring4/spring-mybatis-xml?t=571这篇文章将展示 Spring 与 Mybatis 的集成,以 xml 配置文件的形式实现。1.准备Java 1.8Maven 32. pom.xml3.数据库连接文件 connection.properties...原创 2020-04-26 16:51:44 · 327 阅读 · 0 评论 -
Jedis介绍:Java Redis 客户端库
1.准备Java 1.8 环境Maven 环境开启 redis 服务;2. pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http...原创 2020-04-20 15:22:05 · 217 阅读 · 0 评论 -
Spring 基础:HelloWorld 实例
本教程显示了使用Spring Annotation配置的Spring 4 Hello world Annotation示例,解释了Spring 4的基本概念和用法。环境:Spring 4 Maven 3 JDK 1.8 IDEA 20181.Maven提供Spring依赖项基于Maven的项目,我们将通过Maven pom.xml提供所有必需的依赖项我们只需要S...原创 2020-04-15 17:28:14 · 1318 阅读 · 0 评论 -
openfire 中 servlet 访问 404
原文地址https://www.zhblog.net/go/java/openfire/openfire-plugin-servlet-404?t=565原创 2020-03-31 15:35:42 · 10527 阅读 · 0 评论