欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Java NIO框架Netty教程(十五)

如果您持續關(guān)注OneCoder,您可能會(huì )問(wèn),在《Java NIO框架Netty教程(十四)- Netty中OIO模型(對比NIO)》中不是說(shuō)下節介紹的是,NIO和OIO中的worker處理方式嗎。這個(gè)一定會(huì )有的,只是在研究的過(guò)程中,OneCoder發(fā)現了之前遺留的文件傳輸的代碼,所以決定先完成它。

 
其實(shí),Netty的樣例代碼中也提供了文件上傳下載的代碼樣例,不過(guò)太過(guò)復雜,還包括了Http請求的解析等,對OneCoder來(lái)說(shuō),容易迷惑那些才是文件傳輸的關(guān)鍵部分。所以OneCoder決定根據自己去寫(xiě)一個(gè)樣例,這個(gè)理解就是在最開(kāi)始提到的,Netty的傳輸是基于流的,我們把文件流化應該就可以傳遞了。于是有了以下的代碼:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
 * 文件傳輸接收端,沒(méi)有處理文件發(fā)送結束關(guān)閉流的情景
 *
 * @author lihzh
 * @alia OneCoder
 */
public class FileServerHandler extends SimpleChannelHandler {
 
    private File file = new File("F:/2.txt");
    private FileOutputStream fos;
 
    public FileServerHandler() {
        try {
            if (!file.exists()) {
                file.createNewFile();
            } else {
                file.delete();
                file.createNewFile();
            }
            fos = new FileOutputStream(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    @Override
    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
            throws Exception {
        ChannelBuffer buffer = (ChannelBuffer) e.getMessage();
        int length = buffer.readableBytes();
        buffer.readBytes(fos, length);
        fos.flush();
        buffer.clear();
    }
 
}

 

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
 * 文件發(fā)送客戶(hù)端,通過(guò)字節流來(lái)發(fā)送文件,僅實(shí)現文件傳輸部分,<br>
 * 沒(méi)有對文件傳輸結束進(jìn)行處理<br>
 * 應該發(fā)送文件發(fā)送結束標識,供接受端關(guān)閉流。
 *
 * @author lihzh
 * @alia OneCoder
 */
public class FileClientHandler extends SimpleChannelHandler {
 
        // 每次處理的字節數
    private int readLength = 8;
 
    @Override
    public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)
            throws Exception {
        // 發(fā)送文件
        sendFile(e.getChannel());
    }
 
    private void sendFile(Channel channel) throws IOException {
        File file = new File("E:/1.txt");
        FileInputStream fis = new FileInputStream(file);
        int count = 0;
        for (;;) {
            BufferedInputStream bis = new BufferedInputStream(fis);
            byte[] bytes = new byte[readLength];
            int readNum = bis.read(bytes, 0, readLength);
            if (readNum == -1) {
                return;
            }
            sendToServer(bytes, channel, readNum);
            System.out.println("Send count: " + ++count);
        }
 
    }
 
    private void sendToServer(byte[] bytes, Channel channel, int length)
            throws IOException {
        ChannelBuffer buffer = ChannelBuffers.copiedBuffer(bytes, 0, length);
        channel.write(buffer);
    }
 
}

待發(fā)送的文件1.txt內容如下:

運行上述代碼,接受到的文件2.txt結果:

 

完全一模一樣。成功!
 
這只是一個(gè)簡(jiǎn)單的文件傳輸的例子,可以做為樣例借鑒。對于大文件傳輸的情景,本樣例并不支持,會(huì )出現內存溢出的情景,OneCoder準備另外單獨介紹一下。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
關(guān)于Java的一些NIO框架的一點(diǎn)想法
Java NIO,一本難念的經(jīng)
NIO服務(wù)器框架(MINA、CXF、Mule、JBoss/Geronimo,Grizzly,Cindy)
對于Netty的十一個(gè)疑問(wèn)
N.Space: 一個(gè)NIO框架——Cindy簡(jiǎn)介
Netty介紹(一)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久