Java三种IO模型,一次搞懂!

大家好,我是老三,上一节我们讨论了Linux的五种IO模型,接下来,我们从Java语言层面,来看看对IO的实现。

在Java中,一共有三种IO模型,分别是阻塞IO(BIO)、非阻塞IO(NIO)和异步IO(AIO)。


(资料图片)

Linux五种IO模型和Java三种IO模型

Java BIO

Java BIO就是Java的传统IO模型,对应了操作系统IO模型里的阻塞IO。

Java BIO相关的实现都位于java.io包下,其通信原理是客户端、服务端之间通过Socket套接字建立管道连接,然后从管道中获取对应的输入/输出流,最后利用输入/输出流对象实现发送/接收信息。

我们来看个Demo:

BioServer:
/** * @Author 三分恶 * @Date 2023/4/30 * @Description BIO服务端 */public class BioServer {    public static void main(String[] args) throws IOException {        //定义一个ServerSocket服务端对象,并为其绑定端口号        ServerSocket server = new ServerSocket(8888);        System.out.println("===========BIO服务端启动================");        //对BIO来讲,每个Socket都需要一个Thread        while (true) {            //监听客户端Socket连接            Socket socket = server.accept();            new BioServerThread(socket).start();        }    }    /**     * BIO Server线程     */    static class BioServerThread extends Thread{        //socket连接        private Socket socket;        public BioServerThread(Socket socket){            this.socket=socket;        }        @Override        public void run() {            try {                //从socket中获取输入流                InputStream inputStream=socket.getInputStream();                //转换为                BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));                String msg;                //从Buffer中读取信息,如果读取到信息则输出                while((msg=bufferedReader.readLine())!=null){                    System.out.println("收到客户端消息:"+msg);                }                //从socket中获取输出流                OutputStream outputStream=socket.getOutputStream();                PrintStream printStream=new PrintStream(outputStream);                //通过输出流对象向客户端传递信息                printStream.println("你好,吊毛!");                //清空输出流                printStream.flush();                //关闭socket                socket.shutdownOutput();            } catch (IOException e) {                e.printStackTrace();            }        }    }}
BioClient
/** * @Author 三分恶 * @Date 2023/4/30 * @Description BIO客户端 */public class BioClient {    public static void main(String[] args) throws IOException {        List names= Arrays.asList("帅哥","靓仔","坤坤");        //通过循环创建多个多个client        for (String name:names){            //创建socket并根据IP地址与端口连接服务端            Socket socket=new Socket("127.0.0.1",8888);            System.out.println("===========BIO客户端启动================");            //从socket中获取字节输出流            OutputStream outputStream=socket.getOutputStream();            //通过输出流向服务端传递信息            String hello="你好,"+name+"!";            outputStream.write(hello.getBytes());            //清空流,关闭socket输出            outputStream.flush();            socket.shutdownOutput();            //从socket中获取字节输入流            InputStream inputStream=socket.getInputStream();            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));            //读取服务端消息            String msg;            while((msg=bufferedReader.readLine())!=null){                System.out.println("收到服务端消息:"+msg);            }            inputStream.close();            outputStream.close();            socket.close();        }    }}
先启动BioServer,再启动BioClient,运行结果
===========BIO服务端启动================收到客户端消息:你好,帅哥!收到客户端消息:你好,靓仔!收到客户端消息:你好,坤坤!
===========BIO客户端启动================收到服务端消息:你好,吊毛!===========BIO客户端启动================收到服务端消息:你好,吊毛!===========BIO客户端启动================收到服务端消息:你好,吊毛!

在上述Java-BIO的通信过程中,如果客户端一直没有发送消息过来,服务端则会一直等待下去,从而服务端陷入阻塞状态。同理,由于客户端也一直在等待服务端的消息,如果服务端一直未响应消息回来,客户端也会陷入阻塞状态。

在BioServer定义了一个类BioServerThread,继承了Thread类,run方法里主要是通过socket和流来读取客户端的消息,以及发送消息给客户端,每处理一个客户端的Socket连接,就得新建一个线程。

同时,IO读写操作也是阻塞的,如果客户端一直没有发送消息过来,线程就会进入阻塞状态,一直等待下去。

在BioClient里,循环创建Socket,向服务端收发消息,客户端的读写也是阻塞的。

在这个Demo里就体现了BIO的两个特点:

一个客户端连接对应一个处理线程读写操作都是阻塞的

Java BIO

毫无疑问,不管是创建太多线程,还是阻塞读写,都会浪费服务器的资源。

Java NIO

那么我们就进入Java的下一种IO模型——Java NIO,它对应操作系统IO模型中的多路复用IO,底层采用了epoll实现。

Java-NIO则是JDK1.4中新引入的API,它在BIO功能的基础上实现了非阻塞式的特性,其所有实现都位于java.nio包下。NIO是一种基于通道、面向缓冲区的IO操作,相较BIO而言,它能够更为高效的对数据进行读写操作,同时与原先的BIO使用方式也大有不同。

我们还是先来看个Demo:

NioServer
/** * @Author 三分恶 * @Date 2023/4/30 * @Description NIO服务端 */public class NioServer {    public static void main(String[] args) throws IOException {        //创建一个选择器selector        Selector selector= Selector.open();        //创建serverSocketChannel        ServerSocketChannel serverSocketChannel=ServerSocketChannel.open();        //绑定端口        serverSocketChannel.socket().bind(new InetSocketAddress(8888));        //必须得设置成非阻塞模式        serverSocketChannel.configureBlocking(false);        //将channel注册到selector并设置监听事件为ACCEPT        serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);        System.out.println("===========NIO服务端启动============");        while(true){            //超时等待            if(selector.select(1000)==0){                System.out.println("===========NIO服务端超时等待============");                continue;            }            // 有客户端请求被轮询监听到,获取返回的SelectionKey集合            Iterator iterator=selector.selectedKeys().iterator();            //迭代器遍历SelectionKey集合            while (iterator.hasNext()){                SelectionKey key=iterator.next();                // 判断是否为ACCEPT事件                if (key.isAcceptable()){                    // 处理接收请求事件                    SocketChannel socketChannel=((ServerSocketChannel) key.channel()).accept();                    //非阻塞模式                    socketChannel.configureBlocking(false);                    // 注册到Selector并设置监听事件为READ                    socketChannel.register(selector,SelectionKey.OP_READ, ByteBuffer.allocate(1024));                    System.out.println("成功连接客户端");                }                //判断是否为READ事件                if (key.isReadable()){                    SocketChannel socketChannel = (SocketChannel) key.channel();                    try {                        // 获取以前设置的附件对象,如果没有则新建一个                        ByteBuffer buffer = (ByteBuffer) key.attachment();                        if (buffer == null) {                            buffer = ByteBuffer.allocate(1024);                            key.attach(buffer);                        }                        // 清空缓冲区                        buffer.clear();                        // 将通道中的数据读到缓冲区                        int len = socketChannel.read(buffer);                        if (len > 0) {                            buffer.flip();                            String message = new String(buffer.array(), 0, len);                            System.out.println("收到客户端消息:" + message);                        } else if (len < 0) {                            // 接收到-1,表示连接已关闭                            key.cancel();                            socketChannel.close();                            continue;                        }                        // 注册写事件,下次向客户端发送消息                        socketChannel.register(selector, SelectionKey.OP_WRITE, buffer);                    } catch (IOException e) {                        // 取消SelectionKey并关闭对应的SocketChannel                        key.cancel();                        socketChannel.close();                    }                }                //判断是否为WRITE事件                if (key.isWritable()){                    SocketChannel socketChannel = (SocketChannel) key.channel();                    //获取buffer                    ByteBuffer buffer = (ByteBuffer) key.attachment();                    String hello = "你好,坤坤!";                    //清空buffer                    buffer.clear();                    //buffer中写入消息                    buffer.put(hello.getBytes());                    buffer.flip();                    //向channel中写入消息                    socketChannel.write(buffer);                    buffer.clear();                    System.out.println("向客户端发送消息:" + hello);                    // 设置下次读写操作,向 Selector 进行注册                    socketChannel.register(selector, SelectionKey.OP_READ, buffer);                }                // 移除本次处理的SelectionKey,防止重复处理                iterator.remove();            }        }    }}
NioClient
public class NioClient {    public static void main(String[] args) throws IOException {        // 创建SocketChannel并指定ip地址和端口号        SocketChannel socketChannel = SocketChannel.open(new InetSocketAddress("127.0.0.1", 8888));        System.out.println("==============NIO客户端启动================");        // 非阻塞模式        socketChannel.configureBlocking(false);        String hello="你好,靓仔!";        ByteBuffer buffer = ByteBuffer.wrap(hello.getBytes());        // 向通道中写入数据        socketChannel.write(buffer);        System.out.println("发送消息:" + hello);        buffer.clear();        // 将channel注册到Selector并监听READ事件        socketChannel.register(Selector.open(), SelectionKey.OP_READ, buffer);        while (true) {            // 读取服务端数据            if (socketChannel.read(buffer) > 0) {                buffer.flip();                String msg = new String(buffer.array(), 0, buffer.limit());                System.out.println("收到服务端消息:" + msg);                break;            }        }        // 关闭输入流        socketChannel.shutdownInput();        // 关闭SocketChannel连接        socketChannel.close();    }}
先运行NioServer,再运行NioClient,运行结果:
===========NIO服务端启动=======================NIO服务端超时等待=======================NIO服务端超时等待============成功连接客户端收到客户端消息:你好,靓仔!向客户端发送消息:你好,坤坤!
==============NIO客户端启动================发送消息:你好,靓仔!收到服务端消息:你好,坤坤!

我们在这个案例里实现了一个比较简单的Java NIO 客户端服务端通信,里面有两个小的点需要注意,注册到选择器上的通道都必须要为非阻塞模型,同时通过缓冲区传输数据时,必须要调用flip()方法切换为读取模式。

代码流程示意图

Java-NIO中有三个核心概念:**Buffer(缓冲区)、Channel(通道)、Selector(选择器)**。

Java NIO

每个客户端连连接本质上对应着一个Channel通道,每个通道都有自己的Buffer缓冲区来进行读写,这些Channel被Selector选择器管理调度Selector负责轮询所有已注册的Channel,监听到有事件发生,才提交给服务端线程处理,服务端线程不需要做任何阻塞等待,直接在Buffer里处理Channel事件的数据即可,处理完马上结束,或返回线程池供其他客户端事件继续使用。通过Selector,服务端的一个Thread就可以处理多个客户端的请求Buffer(缓冲区)就是饭店用来存放食材的储藏室,当服务员点餐时,需要从储藏室中取出食材进行制作。Channel(通道)是用于传输数据的车道,就像饭店里的上菜窗口,可以快速把点好的菜品送到客人的桌上。Selector(选择器)就是大堂经理,负责协调服务员、厨师和客人的配合和沟通,以保证整个就餐过程的效率和顺畅。Java AIO

Java-AIO也被成为NIO2,它是在NIO的基础上,引入了新的异步通道的概念,并提供了异步文件通道和异步套接字的实现。

异步通道的实现体系

它们的主要区别就在于这个异步通道,见名知意:使用异步通道去进行IO操作时,所有操作都为异步非阻塞的,当调用read()/write()/accept()/connect()方法时,本质上都会交由操作系统去完成,比如要接收一个客户端的数据时,操作系统会先将通道中可读的数据先传入read()回调方法指定的缓冲区中,然后再主动通知Java程序去处理。

我们还是先来看个Demo:

AioServer
/** * @Author 三分恶 * @Date 2023/5/1 * @Description AIO服务端 */public class AioServer {    public static void main(String[] args) throws Exception {        // 创建异步通道组,处理IO事件        AsynchronousChannelGroup group = AsynchronousChannelGroup.withFixedThreadPool(10, Executors.defaultThreadFactory());        //创建异步服务器Socket通道,并绑定端口        AsynchronousServerSocketChannel server = AsynchronousServerSocketChannel.open(group).bind(new InetSocketAddress(8888));        System.out.println("=============AIO服务端启动=========");        // 异步等待接收客户端连接        server.accept(null, new CompletionHandler() {            // 创建ByteBuffer            final ByteBuffer buffer = ByteBuffer.allocate(1024);            @Override            public void completed(AsynchronousSocketChannel channel, Object attachment) {                System.out.println("客户端连接成功");                try {                    buffer.clear();                    // 异步读取客户端发送的消息                    channel.read(buffer, null, new CompletionHandler() {                        @Override                        public void completed(Integer len, Object attachment) {                            buffer.flip();                            String message = new String(buffer.array(), 0, len);                            System.out.println("收到客户端消息:" + message);                            // 异步发送消息给客户端                            channel.write(ByteBuffer.wrap(("你好,阿坤!").getBytes()), null, new CompletionHandler() {                                @Override                                public void completed(Integer result, Object attachment) {                                    // 关闭输出流                                    try {                                        channel.shutdownOutput();                                    } catch (IOException e) {                                        e.printStackTrace();                                    }                                }                                @Override                                public void failed(Throwable exc, Object attachment) {                                    exc.printStackTrace();                                    try {                                        channel.close();                                    } catch (IOException e) {                                        e.printStackTrace();                                    }                                }                            });                        }                        @Override                        public void failed(Throwable exc, Object attachment) {                            exc.printStackTrace();                            try {                                channel.close();                            } catch (IOException e) {                                e.printStackTrace();                            }                        }                    });                } catch (Exception e) {                    e.printStackTrace();                }                // 继续异步等待接收客户端连接                server.accept(null, this);            }            @Override            public void failed(Throwable exc, Object attachment) {                exc.printStackTrace();                // 继续异步等待接收客户端连接                server.accept(null, this);            }        });        // 等待所有连接都处理完毕        group.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);    }}
AioClient
/** * @Author 三分恶 * @Date 2023/5/1 * @Description AIO客户端 */public class AioClient {    public static void main(String[] args) throws Exception {        // 创建异步Socket通道        AsynchronousSocketChannel client = AsynchronousSocketChannel.open();        // 异步连接服务器        client.connect(new InetSocketAddress("127.0.0.1", 8888), null, new CompletionHandler() {            // 创建ByteBuffer            final ByteBuffer buffer = ByteBuffer.wrap(("你好,靓仔!").getBytes());            @Override            public void completed(Void result, Object attachment) {                // 异步发送消息给服务器                client.write(buffer, null, new CompletionHandler() {                    // 创建ByteBuffer                    final ByteBuffer readBuffer = ByteBuffer.allocate(1024);                    @Override                    public void completed(Integer result, Object attachment) {                        readBuffer.clear();                        // 异步读取服务器发送的消息                        client.read(readBuffer, null, new CompletionHandler() {                            @Override                            public void completed(Integer result, Object attachment) {                                readBuffer.flip();                                String msg = new String(readBuffer.array(), 0, result);                                System.out.println("收到服务端消息:" + msg);                            }                            @Override                            public void failed(Throwable exc, Object attachment) {                                exc.printStackTrace();                                try {                                    client.close();                                } catch (IOException e) {                                    e.printStackTrace();                                }                            }                        });                    }                    @Override                    public void failed(Throwable exc, Object attachment) {                        exc.printStackTrace();                        try {                            client.close();                        } catch (IOException e) {                            e.printStackTrace();                        }                    }                });            }            @Override            public void failed(Throwable exc, Object attachment) {                exc.printStackTrace();                try {                    client.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        });        // 等待连接处理完毕        Thread.sleep(1000);        // 关闭输入流和Socket通道        client.shutdownInput();        client.close();    }}
看下运行结果
=============AIO服务端启动=========客户端连接成功收到客户端消息:你好,靓仔!
收到服务端消息:你好,阿坤!

可以看到,所有的操作都是异步进行,通过completed接收异步回调,通过failed接收错误回调。

而且我们发现,相较于之前的NIO而言,AIO其中少了Selector选择器这个核心组件,选择器在NIO中充当了协调者的角色。

但在Java-AIO中,类似的角色直接由操作系统担当,而且不是采用轮询的方式监听IO事件,而是采用一种类似于“订阅-通知”的模式。

Java AIO简图

在AIO中,所有创建的通道都会直接在OS上注册监听,当出现IO请求时,会先由操作系统接收、准备、拷贝好数据,然后再通知监听对应通道的程序处理数据。

Java-AIO这种异步非阻塞式IO也是由操作系统进行支持的,在Windows系统中提供了一种异步IO技术:IOCP(I/O Completion Port,所以Windows下的Java-AIO则是依赖于这种机制实现。不过在Linux系统中由于没有这种异步IO技术,所以Java-AIO在Linux环境中使用的还是epoll这种多路复用技术进行模拟实现的。

因为Linux的异步IO技术实际上不太成熟,所以Java-AIO的实际应用并不是太多,比如大名鼎鼎的网络通信框架Netty就没有采用Java-AIO,而是使用Java-NIO,在代码层面,自行实现异步。

小结

那么这期我们就快速过了一下Java的三种IO机制,它们的特点,我们直接看下图:

Java三种IO模型

我们也发现,虽然Java-NIO、Java-AIO,在性能上比Java-BIO要强很多,但是可以看到,写法上一个比一个难搞,不过好在基本也没人直接用Java-NIO、Java-AIO,如果要进行网络通信,一般都会采用Netty,它对原生的Java-NIO进行了封装优化,接下来,我们会继续走近Netty,敬请期待。

参考:

[1].《Netty权威指南》

[2].https://juejin.cn/post/7130952602350534693#heading-14

[3].https://www.jianshu.com/p/670033e5b916

标签:

上一篇 :

福州9日起天气转好 气温小幅回升|世界球精选

下一篇 :

最后一页

推荐阅读

Java三种IO模型,一次搞懂!

Java三种IO模型,一次搞懂!

大家好,我是老三,上一节我们讨论了Linux的五种IO模型,接下来,我们从Java语言层面,来看看对IO的实现。

2023-05-09
福州9日起天气转好 气温小幅回升|世界球精选

福州9日起天气转好 气温小幅回升|世界球精选

9日起,福州的好天气又要“上线”了。9日,福州全市多云,10日福州全市多云到晴,11日全市多云转阴,部...

2023-05-09
天津经开区出台支持化工新材料高质量发展方案

天津经开区出台支持化工新材料高质量发展方案

主持人:在昨天(0508)举行的科创中国绿色石化产业高质量发展论坛上,天津经开区发布支持化工新材料高质量

2023-05-09
工信部批复5G地空通信试验频率 推动5G在航空互联网领域应用 焦点热闻

工信部批复5G地空通信试验频率 推动5G在航空互联网领域应用 焦点热闻

工信部批复5G地空通信试验频率推动5G在航空互联网领域应用,为深入贯彻落实党的二十大关于加快建设网络强国

2023-05-09
上市传闻中,嘉行传媒没了杨幂“王牌”-全球速递

上市传闻中,嘉行传媒没了杨幂“王牌”-全球速递

上市未成,“顶梁柱”出走。

2023-05-09
世界最新:生鲜外带,让美食离消费者更近(微经济)

世界最新:生鲜外带,让美食离消费者更近(微经济)

生鲜外带模式的兴起,满足了消费者对品质生活的需求。相信越来越多餐饮企业能在转型过程中抓住机遇,把新鲜

2023-05-09
三立期货5月9日早间内参——能化|最资讯

三立期货5月9日早间内参——能化|最资讯

三立期货5月9日早间内参——能化

2023-05-09
天天微资讯!重疾险升级 惠民保上线

天天微资讯!重疾险升级 惠民保上线

对于深圳小伙伴来说,每年都有件重要的事,那就是购买深圳重疾险。自2015年上线至今,深圳重疾险参保人数逐

2023-05-09
外贸“18条”新在何处? 天天视讯

外贸“18条”新在何处? 天天视讯

5月5日,第133届广交会线下展在广州落幕。本届广交会总展览面积达150万平方米,线下参展企业数量达3 5万家

2023-05-09
最新快讯!5月8日基金净值:中信证券臻选价值成长混合A最新净值1.1145,涨0.39%

最新快讯!5月8日基金净值:中信证券臻选价值成长混合A最新净值1.1145,涨0.39%

5月8日,中信证券臻选价值成长混合A最新单位净值为1 1145元,累计净值为1 9329元,较前一交易日上涨0 39%。

2023-05-09
世界信息:如何看待负电价?三峡能源:是一种现货交易报价方式

世界信息:如何看待负电价?三峡能源:是一种现货交易报价方式

新京报贝壳财经讯5月8日,三峡能源(600905 SH)董事、总经理张龙在业绩说明会上就一些地区出现负电价的提问

2023-05-09
“甜蜜之城吐鲁番 满城摇落桑葚雨”2023新疆吐鲁番桑葚节盛大开幕|每日消息

“甜蜜之城吐鲁番 满城摇落桑葚雨”2023新疆吐鲁番桑葚节盛大开幕|每日消息

人间五月天,桑葚满枝头。5月7日上午,“甜蜜之城吐鲁番满城摇落桑葚雨”2023新疆吐鲁番桑葚节在吐鲁番...

2023-05-09
焦点消息!剔骨之刑是什么_剔骨之刑的解释

焦点消息!剔骨之刑是什么_剔骨之刑的解释

欢迎观看本篇文章,小柴来为大家解答以上问题。剔骨之刑是什么,剔骨之刑的解释很多人还不知道,现在让我们

2023-05-09
5000元的学习机是智商税嘛?在作业帮这里,只有超值性价比

5000元的学习机是智商税嘛?在作业帮这里,只有超值性价比

对于家长而言,孩子学习成绩好,就是自己努力工作辛劳最好安慰,自己付出的一切仿佛都是值得的,不过这也给

2023-05-08
火线上任!固收老将接掌老牌合资基金,后张翔燕时代,信诚往何处去?|每日简讯

火线上任!固收老将接掌老牌合资基金,后张翔燕时代,信诚往何处去?|每日简讯

董元星新任中信保诚总经理

2023-05-08
k40偶尔会出现屏幕乱跳(为什么k40屏幕一会暗一会亮)|焦点

k40偶尔会出现屏幕乱跳(为什么k40屏幕一会暗一会亮)|焦点

品牌型号:红米K40系统:MIUI12 5k40偶尔会出现屏幕乱跳的原因:1、未使用原装充电器。在操作手机的过程中

2023-05-08
精彩看点:民调显示拜登支持率跌至新低

精彩看点:民调显示拜登支持率跌至新低

新华社北京5月8日电7日公布的美国广播公司新闻部和《华盛顿邮报》联合民意调查结果显示,对民主党籍总统约

2023-05-08
环球资讯:中国星辰|现场直击!“太空快递”又将发货

环球资讯:中国星辰|现场直击!“太空快递”又将发货

央视网消息:独家视角现场直击!“太空快递”又将发货,天舟六号船箭垂直转运进发射区。

2023-05-08
这7种伤害车漆的方式,你一定都经历过!

这7种伤害车漆的方式,你一定都经历过!

随着汽车生产技术的越来越升级,汽车的使用年限也逐年增长,车是越开越久,车身却千疮百孔,面对性能良好但

2023-05-08
环球新动态:数据复盘|主力加仓银行、非银金融等行业 龙虎榜机构抢筹中国银行、科大讯飞等

环球新动态:数据复盘|主力加仓银行、非银金融等行业 龙虎榜机构抢筹中国银行、科大讯飞等

5月8日,沪深两市股指集体上涨,上证指数早盘高开高走,午后持续走强;深证成指、创业板指早盘高开后快速回

2023-05-08
贵州省黔南州委原副书记、政法委书记肖发君被依法决定逮捕_当前资讯

贵州省黔南州委原副书记、政法委书记肖发君被依法决定逮捕_当前资讯

新华社贵阳5月8日电(记者汪军)记者8日从贵州省人民检察院获悉,贵州省黔南州委原副书记、政法委书记肖发

2023-05-08
高标准农田将率先全覆盖!定兴“农田新基建”模式引来全省现场观摩

高标准农田将率先全覆盖!定兴“农田新基建”模式引来全省现场观摩

5月7日,全省高标准农田建设工作会议在定兴县召开,集中展示高标准农田示范区新科技、新模式,全面部署全省

2023-05-08
今日快讯:【环球财经】德国3月工业产出环比下降3.4%

今日快讯:【环球财经】德国3月工业产出环比下降3.4%

德国联邦统计局8日公布的数据显示,受汽车业产出下降影响,经季节和工作日调整后,3月德国工业产出环比下降

2023-05-08
河南叶县树标兵表彰民企员工

河南叶县树标兵表彰民企员工

转自:中华工商时报河南省平顶山市叶县工商联近日举行2023年工商联常委企业迎“五一”表彰大会。叶县县...

2023-05-08
世界报道:“守护微笑,筑梦地贫”主题公益活动助力湖南地贫早日清零

世界报道:“守护微笑,筑梦地贫”主题公益活动助力湖南地贫早日清零

湖南省儿童医院线下活动现场5月8日是第30个“世界地贫日”,也是世界微笑日,芒果TV(芒果公益平台)联...

2023-05-08
党员“双报到”,服务践“初心”|焦点热议

党员“双报到”,服务践“初心”|焦点热议

为充分发挥基层党组织和全体党员在街道社区共治共建中的作用,完善党员联系服务群众工作体系。近日,济阳区

2023-05-08
遗产争夺战追踪:继母周婷申请冻结关键公司股权 杉杉股份回称正在核实

遗产争夺战追踪:继母周婷申请冻结关键公司股权 杉杉股份回称正在核实

一场拉锯战正在开启杉杉股份(600884 SH)的遗产争夺战有了新的后续。日前,媒体报道称杉杉股份原实控人郑永

2023-05-08
5月8日 14:40分  联合光电(300691)股价快速拉升-天天速看料

5月8日 14:40分 联合光电(300691)股价快速拉升-天天速看料

分时图快速拉升意味此时存在大单买入,在大单的推动下,股价快速地上涨。截止发稿,联合光电(300691)涨幅

2023-05-08
新动态:老显卡竟然还能抵 750 元,快看看这份显卡以旧换新表

新动态:老显卡竟然还能抵 750 元,快看看这份显卡以旧换新表

5月8日消息,七彩虹推出了显卡以旧换新活动,将你手中的指定七彩虹老显卡寄回,就可抵扣购买新品卡的一部分

2023-05-08
茅山后裔同人之手足印玉佩 第三十六章 追兵-天天观速讯

茅山后裔同人之手足印玉佩 第三十六章 追兵-天天观速讯

阳怒阵的巨响后,张国忠先是一阵耳鸣,紧接着脑子都晕晕乎乎的。没有料到这次的阳怒规模这么大,张国忠摇了

2023-05-08
小马队对 LSU CB Cordale Flott 表现出兴趣

小马队对 LSU CB Cordale Flott 表现出兴趣

据报道,印第安纳波利斯小马队是在2022年NFL选秀之前要求与前路易斯安那州立大学角卫CordaleFlot

2023-05-08
世界速讯:历史|推步聚顶测妖田?这题我会——显微镜下的明朝数学

世界速讯:历史|推步聚顶测妖田?这题我会——显微镜下的明朝数学

前不久,网剧《显微镜下的大明之丝绢案》播出,剧中多次呈现一种神奇的“推步聚顶之术”,用于测量那些...

2023-05-08
快报:结婚的五金是指什么呢(结婚五金是指哪五个金)

快报:结婚的五金是指什么呢(结婚五金是指哪五个金)

结婚的五金是指金戒指、金耳环、金项链、金手镯、金脚链五样金饰品。结婚五金的每件物品都有其独特的寓意,

2023-05-08
淄博一季度GDP超1000亿元,同比增长4.7%

淄博一季度GDP超1000亿元,同比增长4.7%

重点行业实现较快增长,批发和零售业、住宿业和餐饮业、金融业增加值分别增长9 7%、10 2%、8 2%,增速分别

2023-05-08
全球速递!元小乐AR娱乐引领线下AR游戏创业新风;广州天硕科技有限公司

全球速递!元小乐AR娱乐引领线下AR游戏创业新风;广州天硕科技有限公司

近年来,瞬息万变的商业环境,让很多投资者的投资意向变得保守。大额的投资项目越来越少,反而是回本快,收

2023-05-08
防晒霜和隔离霜功效一样吗_防晒霜和隔离霜一样吗 世界观点

防晒霜和隔离霜功效一样吗_防晒霜和隔离霜一样吗 世界观点

1、防晒霜,故名不可思议,是一种能为皮肤提供防晒功能,阻挡紫外线对皮肤伤害的产品。大部分防晒霜只有防

2023-05-08
塑料购物袋选择有窍门 “食品用”注意这几点

塑料购物袋选择有窍门 “食品用”注意这几点

塑料购物袋选择有窍门“食品用”注意这几点

2023-05-08
共享单车升级空间广阔_世界观点

共享单车升级空间广阔_世界观点

作者:洪群联一段时间以来,共享单车的出现有效解决了传统交通服务市场中“打车难”和“最后一公里”的...

2023-05-08
手机电池颜色变黄了_手机电池变黄颜色是什么情况

手机电池颜色变黄了_手机电池变黄颜色是什么情况

1、电池变黄是因为低电量模式已开启。2、电池充满电的时候是绿色的,下面用的时候是黄色的。3、此时,将开

2023-05-08
华安证券给予拓邦股份买入评级,新能源扩产、家电/工具复苏,有望受益边缘AI和终端智能化

华安证券给予拓邦股份买入评级,新能源扩产、家电/工具复苏,有望受益边缘AI和终端智能化

每经AI快讯,华安证券05月07日发布研报称,给予拓邦股份(002139 SZ,最新价:10 81元)买入评级。评级理由

2023-05-08
天天头条:球迷热议阿森纳vs纽卡:纽卡斯尔格斗队 裁判今天忘带牌了?

天天头条:球迷热议阿森纳vs纽卡:纽卡斯尔格斗队 裁判今天忘带牌了?

英超第35轮,阿森纳客场2-0战胜纽卡,但这场比赛裁判尺度宽松,纽卡球员的多次大动作拼抢裁判都没有表示。

2023-05-08
天天速看:天津外地车有高峰通行证了还限号吗?

天天速看:天津外地车有高峰通行证了还限号吗?

天津外地车需要同时遵守尾号限行规定和高峰限行规定。但在办理高峰通行证后,可以在早晚高峰时段进入外环线

2023-05-08
泩五笔怎么打_泩

泩五笔怎么打_泩

1、首先都是汉语里的汉字迋wàngkuāng基本字义1 往,前往:“君使子展~劳于东门之外。2、”迋kuāng

2023-05-08
智通全球财经日志|5月8日 环球今亮点

智通全球财经日志|5月8日 环球今亮点

智通财经APP预告,2023年5月8日,全球主要经济体将公布以下重要数据,具体情况如下:08:00中国中国4月外汇储备(

2023-05-08
世界信息:什么是合数和质数_质数和合数的定义是什么

世界信息:什么是合数和质数_质数和合数的定义是什么

欢迎观看本篇文章,小柴来为大家解答以上问题。什么是合数和质数,质数和合数的定义是什么很多人还不知道,

2023-05-07
专家解读本轮强降雨进程:规模广强度大,时刻较终年显着偏早,原因终究是什么

专家解读本轮强降雨进程:规模广强度大,时刻较终年显着偏早,原因终究是什么

5月2日以来,我国华中、华东区域呈现强降雨及强对流气候进程。7日,雨带持续南压,强降雨区转移至华南。5月

2023-05-07
宏碁非凡S3Pro高能版笔记本电脑下单立减200元|今日关注

宏碁非凡S3Pro高能版笔记本电脑下单立减200元|今日关注

宏碁非凡S3Pro高能版笔记本电脑,搭载12代英特尔酷睿处理器,金属轻薄,炫酷全面屏;高频内存,快速读写;

2023-05-07
10岁女孩乳房发育程度_女孩十岁发育正常吗

10岁女孩乳房发育程度_女孩十岁发育正常吗

1、随着社会整体营养状况的改善,儿童的生长发育明显提前。2、我国目前诊断性早熟的标准是女孩在8岁前出现

2023-05-07
天天头条:市民投诉广东东莞一地连日砍树?当地回应称正进行树种更换

天天头条:市民投诉广东东莞一地连日砍树?当地回应称正进行树种更换

“原来的树被砍掉,山头变得光秃秃的!”市民陈先生近日向南都记者报料,东莞长安咸西社区在五一期间对...

2023-05-07
武汉恒大御景湾_关于武汉恒大御景湾简述 每日热议

武汉恒大御景湾_关于武汉恒大御景湾简述 每日热议

1、武汉恒大御景湾由恒大地产联合湖北最大的传媒集团——湖北日报传媒集团共同打造,位于武汉市汉阳区鹦...

2023-05-07
福建龙岩新罗区四名干部失联 当地组织500余人搜救

福建龙岩新罗区四名干部失联 当地组织500余人搜救

5月6日至7日,福建龙岩市新罗区遭遇特大暴雨袭击,当地龙川溪水位暴涨。5月7日1时40分许,新罗区铁山镇4名

2023-05-07
韩国市民团体集会抗议日本首相岸田文雄访韩|每日消息

韩国市民团体集会抗议日本首相岸田文雄访韩|每日消息

当地时间6日晚,韩国多个市民团体的代表在首尔市中心举行集会,抗议日本首相岸田文雄将对韩国展开访问。当

2023-05-07
精彩看点:玩得尽兴!周末来北外滩开启“初夏漫游计划”吧~

精彩看点:玩得尽兴!周末来北外滩开启“初夏漫游计划”吧~

告别了微风醺醺的春天,迎来了暖风习习的初夏,是时候开启一场“初夏漫游计划”了,趁着周末,来北外滩...

2023-05-07
那坡县气象台发布雷电黄色预警信号【III级/较重】【2023-05-07】 全球头条

那坡县气象台发布雷电黄色预警信号【III级/较重】【2023-05-07】 全球头条

那坡县气象台2023年5月7日13时23分发布雷电黄色预警信号:预计未来6小时内那坡县可能发生雷电活动并伴有大

2023-05-07
全球观察:汀步石材_汀步石

全球观察:汀步石材_汀步石

1、汀步,又称步石、飞石。2、浅水中按一定间距布设块石,微露水面,使人跨步而过。3、园林中运用这种古老

2023-05-07
每日热议!陕西发布地质灾害黄色预警

每日热议!陕西发布地质灾害黄色预警

陕西省自然资源厅与陕西省气象局联合发布地质灾害气象预报预警。

2023-05-07
动态:电脑检测不到摄像头是什么原因_我的电脑检测不到摄像头是怎么回事

动态:电脑检测不到摄像头是什么原因_我的电脑检测不到摄像头是怎么回事

1、【原因分析】:接口接触不良,驱动程序等原因导致【解决方案:】:方案一:1 更换usb接口重新安装视频驱

2023-05-07
杭州购二套房无需落户满5年?假的 全球播资讯

杭州购二套房无需落户满5年?假的 全球播资讯

App5月7日消息,近日,一则关于杭州楼市政策的消息在网上引发议论。该消息称,杭州5月1日起施行楼市新政,

2023-05-07
一图速览:92岁巴菲特+99岁芒格精彩开讲 巴菲特股东大会金句来了 实时

一图速览:92岁巴菲特+99岁芒格精彩开讲 巴菲特股东大会金句来了 实时

一图速览:92岁巴菲特+99岁芒格精彩开讲,巴菲特股东大会金句来了。

2023-05-07
茂名市第十六中学北校区_关于茂名市第十六中学北校区的简介 全球要闻

茂名市第十六中学北校区_关于茂名市第十六中学北校区的简介 全球要闻

音频解说1、茂名市第十六中学北校区是在茂名市第十二中学的基础上建立起来的,于2012年9月1日揭牌成立本文

2023-05-07
江西丰城一河堤溃口约30米 直击抢险救援现场

江西丰城一河堤溃口约30米 直击抢险救援现场

图为航拍清丰堤河堤溃口现场,河堤后方(图中左侧)大片农田和部分村庄被淹。刘力鑫摄图为航拍清丰堤河堤溃口

2023-05-07
当前资讯!巴菲特:美国需要和中国搞好关系

当前资讯!巴菲特:美国需要和中国搞好关系

伯克希尔哈撒韦公司CEO沃伦·巴菲特表示,美国需要和中国搞好关系,需要进行更多的自由贸易,这符合两国...

2023-05-07
每日观察!西宁公安:公开征集赖珍贵等人涉嫌违法犯罪线索

每日观察!西宁公安:公开征集赖珍贵等人涉嫌违法犯罪线索

5月6日,西宁市公安局城西公安分局关于公开征集赖珍贵等人涉嫌违法犯罪线索的通告:近期,经西宁市公安局城

2023-05-07
SATAKE佐竹品牌介绍_佐竹米机

SATAKE佐竹品牌介绍_佐竹米机

创立于1896年的全球知名谷物机械制造商,在日本发明了更早的碾米机,致力于为用户提供从田间到餐桌的全谷物

2023-05-07
长春电子驾驶证申请指南 天天即时

长春电子驾驶证申请指南 天天即时

申领方法:驾驶人可“交管12123”APP个人账号领取,电子驾驶证式样全国统一,与纸质驾驶证具有同等法律...

2023-05-06
天天消息!广西海警抓获冲滩搁浅摩托艇 查获走私香烟7000余条

天天消息!广西海警抓获冲滩搁浅摩托艇 查获走私香烟7000余条

中新网广西新闻5月6日电(宋俊杰)广西防城港海警局6日通报,该局近日在辖区海域查获1起涉嫌走私香烟案,现

2023-05-06
世界资讯:粽子中间有点夹生了放凉还可以煮吗(粽子中间夹生怎么回事)

世界资讯:粽子中间有点夹生了放凉还可以煮吗(粽子中间夹生怎么回事)

粽子是生活中比较受欢迎的一种食物,很多人都会在家煮粽子吃,尤其是端午节的时候。有些人煮粽子,会发现粽

2023-05-06
生活富裕了是否还需要节俭事例_生活富裕了是否还需要节俭|今日关注

生活富裕了是否还需要节俭事例_生活富裕了是否还需要节俭|今日关注

1、生活富裕了,是否还需要节俭?这的确是我们当代人应研究的课题。2、生活富裕了,我们生活水平随之提高,

2023-05-06
2023年5月4日WTI原油价格最新行情预测

2023年5月4日WTI原油价格最新行情预测

中国报告大厅2023年5月4日WTI原油价格最新走势监测显示:WTI原油报价机构,今日WTI原油(种类:WTI原油;)市

2023-05-06
盆栽的郁金香好养吗 郁金香冬天露天养能行吗

盆栽的郁金香好养吗 郁金香冬天露天养能行吗

郁金香在生活中十分常见,因其花开芬芳艳丽且形状各异而深受广大养花之人的喜爱。那么盆栽的郁金香好养吗?

2023-05-06
焦点速看:5月7日起,菏泽城际公交执行夏季运营时间!

焦点速看:5月7日起,菏泽城际公交执行夏季运营时间!

注意!注意!自2023年5月7日起菏泽城际公交执行夏季运营时间部分线路首末班时间有调整经常坐公交出行的市民

2023-05-06
当前速读:超威演绎高质量发展生动样本

当前速读:超威演绎高质量发展生动样本

增加含“新”量提升含“金”量强化含“数”量。灯光闪烁、机器轰鸣,自动化生产线高速运转,一排排机械...

2023-05-06
5月6日中燃河北地区燃料油报价平稳

5月6日中燃河北地区燃料油报价平稳

生意社获悉,5月6日中燃河北地区燃料油180cst燃料油180cst油库自提低硫报价5490元 吨,燃料油120cst自提低

2023-05-06
胡锡进:有些疫情期间关闭的大门,为何至今还没有打开?

胡锡进:有些疫情期间关闭的大门,为何至今还没有打开?

世卫组织宣布新冠疫情不再构成国际关注的突发公共卫生事件。而刚刚过去的五一小长假,中国的消费和出行总人

2023-05-06
业界:完善中文域名应用环境 促进互联网信息共享 全球观焦点

业界:完善中文域名应用环境 促进互联网信息共享 全球观焦点

人民网北京5月5日电(黄盛)为了进一步推动中文域名应用全面普及、推进中文域名的健康发展,近日在北京举办

2023-05-06
焦点要闻:解剖屎山,寻觅黄金之第二弹

焦点要闻:解剖屎山,寻觅黄金之第二弹

大家好,我3y啊。由于去重逻辑重构了几次,好多股东直呼看不懂,于是我今天再安排一波对代码的解析吧。aust

2023-05-06
青岛机场边检站查获1名网上在逃人员

青岛机场边检站查获1名网上在逃人员

5月4日,山东出入境边防检查总站青岛机场边检站在执行新加坡至青岛的TR186次航班入境边检任务时,查获一名

2023-05-06
泥鳅吃什么东西? 泥鳅属于哪一类 快消息

泥鳅吃什么东西? 泥鳅属于哪一类 快消息

1、泥鳅属杂食性鱼类,泥鳅的幼鱼阶段摄食动物性饵料,以浮游动物、摇蚊幼虫、丝蚯蚓、水生昆虫、甲壳动物

2023-05-06
“围城”下的立讯精密 全球快报

“围城”下的立讯精密 全球快报

曾经有人将果链比喻成“围城”:外面的企业想进去,里面的企业想出来。不过,对于已经身处果链中央的立...

2023-05-06
初榨椰子油的用法 椰子油的用法_世界报资讯

初榨椰子油的用法 椰子油的用法_世界报资讯

今天来聊聊关于初榨椰子油的用法,椰子油的用法的文章,现在就为大家来简单介绍下初榨椰子油的用法,椰子油

2023-05-06
【报资讯】“奇葩”赛力斯:2023将为跳级付出代价?

【报资讯】“奇葩”赛力斯:2023将为跳级付出代价?

图片来源@视觉中国清明节期间,马英九回大陆祭祖,顺便参观了为数不多的几家企业,赛力斯成为他参观的唯一

2023-05-06
一季度医保住院费用跨省直接结算服务减少个人垫付268.75亿元

一季度医保住院费用跨省直接结算服务减少个人垫付268.75亿元

从国家医保局获悉,目前,所有职工医保和居民医保参保人员,无论是长期异地居住的随迁老人、出省打工的农民

2023-05-06
天天热消息:优酷爱奇艺腾讯视频哪个电影资源多_优酷爱奇艺

天天热消息:优酷爱奇艺腾讯视频哪个电影资源多_优酷爱奇艺

1、爱奇艺是百度旗下视频网站,虽然是新起之秀,但近年来凭借百度的大数据支持和流量导入,爱奇艺业绩飞速

2023-05-06
要闻速递:奇瑞4月销量12.67万辆,同增128%

要闻速递:奇瑞4月销量12.67万辆,同增128%

奇瑞4月销量12 67万辆,同增128%5月6日,奇瑞集团发布4月销量,数据显示,奇瑞集团4月销售汽车12 67万辆,

2023-05-06
辽沈银行2022年净亏损29.32亿元

辽沈银行2022年净亏损29.32亿元

近日,辽沈银行发布2022年度报告。报告期内,该行实现营业收入(合并口径,下同)-17 31亿元;净利润-29 32

2023-05-06
民生证券给予伊利股份推荐评级|当前看点

民生证券给予伊利股份推荐评级|当前看点

民生证券05月05日发布研报称,给予伊利股份(600887 SH,最新价:29 71元)推荐评级。评级理由主要包括:1

2023-05-06
天天要闻:发现未成年人面临危险未报告 去年以来安徽21人被追责

天天要闻:发现未成年人面临危险未报告 去年以来安徽21人被追责

人民网合肥5月5日电(韩震震)5月4日下午,安徽省人民检察院通报了全省检察履职与青少年司法保护工作情况。

2023-05-06
俄外长:俄罗斯在印度银行积累了数十亿卢比 但无法使用

俄外长:俄罗斯在印度银行积累了数十亿卢比 但无法使用

当地时间周五(5月5日),俄罗斯外交部长拉夫罗夫表示,该国在印度银行积累了数十亿印度卢比,但却无法使用。

2023-05-06
坏账准备在资产负债表中如何列示 坏账准备在资产负债表中怎么体现-环球信息

坏账准备在资产负债表中如何列示 坏账准备在资产负债表中怎么体现-环球信息

今天来聊聊关于坏账准备在资产负债表中如何列示,坏账准备在资产负债表中怎么体现的文章,现在就为大家来简

2023-05-06
天天日报丨骁龙8 Gen2/7 Gen2+/天玑8200差价4000元 看完玩原神不多花钱

天天日报丨骁龙8 Gen2/7 Gen2+/天玑8200差价4000元 看完玩原神不多花钱

原神是目前最炙手可热的手游之一,能不能流畅运行原神也成为了衡量一款手机性能的标准。其实,想要玩原神也

2023-05-06
【速看料】闪光的你作文600字初一记叙文(必备10篇)

【速看料】闪光的你作文600字初一记叙文(必备10篇)

闪光的你作文600字初一记叙文第1篇青春让多少人做出傻事,如当年初二的我正值人生中最完美的青春期!但是我

2023-05-06
甲醇市场低迷 企业利润承压

甲醇市场低迷 企业利润承压

今年一季度,国内甲醇市场持续低迷,企业利润承压。财报数据显示,开滦股份(600997 SH)一季度实现净利润4

2023-05-06
宁波高校:传承五四薪火 启航青春征程 全球热议

宁波高校:传承五四薪火 启航青春征程 全球热议

5月4日,浙江省宁波市各高校组织多种活动,传承五四薪火,启航青春征程。早上6:30,宁波工程学院团委组织

2023-05-06
【全球速看料】魁龙书院_关于魁龙书院简述

【全球速看料】魁龙书院_关于魁龙书院简述

小伙伴们,你们好,今天小夏来聊聊一篇关于魁龙书院,关于魁龙书院简述的文章,网友们对这件事情都比较关注

2023-05-06
每日快报!保利发展前4个月签约额约1558亿元

每日快报!保利发展前4个月签约额约1558亿元

新京报讯(记者寇德娜)5月5日,保利发展控股集团股份有限公司(简称“保利发展”)发布2023年4月份销售情况...

2023-05-06
衡阳市多宗土地资产进行推介!

衡阳市多宗土地资产进行推介!

5月5日,衡阳城投集团对旗下位于滨江新区的土地资产进行推介。滨江新区实景图滨江新区实景图滨江新区位于衡

2023-05-05
绿城中国(03900)前4个月总合同销售金额约884亿元

绿城中国(03900)前4个月总合同销售金额约884亿元

绿城中国(03900)发布公告,2023年4月,绿城集团自投项目取得销售4009套

2023-05-05
杜康:非农爆冷,黄金转跌了吗? 环球动态

杜康:非农爆冷,黄金转跌了吗? 环球动态

非农数据公布,大幅利空,黄金也应声而跌,那么本次上涨是否结束了呢?杜康的观点没有变,依旧是多头,回落

2023-05-05
“折叠的时光圈”长什么样?看这里→ ▏儿童友好地图②-环球热点评

“折叠的时光圈”长什么样?看这里→ ▏儿童友好地图②-环球热点评

儿童友好型商场、“折叠的时光圈”街区设计、“曲苑”爱国主义教育基地……近日,曲阳路街道儿童友好资...

2023-05-05
环球微速讯:湘西汉子驾车环游中国,一边坚持热爱一边谋生

环球微速讯:湘西汉子驾车环游中国,一边坚持热爱一边谋生

三湘都市报5月5日讯(文 视频全媒体记者田甜)一车一人,一路故事,35岁的湘西汉子孙长昆一直在追逐梦想与

2023-05-05
x 广告
x 广告

Copyright ©  2015-2022 起点水产网版权所有  备案号:皖ICP备2022009963号-12   联系邮箱: 39 60 29 14 2@qq.com