最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java的TCP/IP編程學(xué)習(xí)--基于定界符的成幀

 更新時(shí)間:2019年04月02日 15:15:37   作者:畢九生  
這篇文章主要介紹了Java的TCP/IP編程學(xué)習(xí)--基于定界符的成幀,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、定界符成幀

Framer接口

package framer;

import java.io.IOException;
import java.io.OutputStream;

public interface Framer {
  /**
   * 添加成幀信息并將指定消息輸出到指定流
   * @param message
   * @param out
   * @throws IOException
   */
  void frameMsg(byte[] message, OutputStream out) throws IOException;

  /**
   * 掃描指定的流,從中抽取下一條信息
   * @return
   * @throws IOException
   */
  byte[] nextMsg() throws IOException;
}

基于定界符的成幀

package framer;

import java.io.*;

/**
 * @ClassName DelimFramer
 * @Description TODO
 * @Author Cays
 * @Date 2019/3/16 22:04
 * @Version 1.0
 **/
public class DelimFramer implements Framer {
  //輸入流
  private InputStream in;
  //定界符為換行符
  private static final byte DELIMITER='\n';

  public DelimFramer(InputStream in) {
    this.in = in;
  }

  @Override
  public void frameMsg(byte[] message, OutputStream out) throws IOException {
    //檢測信息中是否包含換行符
    for (byte b:message){
      if (b==DELIMITER){
        throw new IOException("Message contaions delimiter");
      }
    }
    //將成幀的信息輸出到流中
    out.write(message);
    //添加定界符
    out.write(DELIMITER);
    out.flush();
  }

  @Override
  public byte[] nextMsg() throws IOException {
    ByteArrayOutputStream messageBuffer=new ByteArrayOutputStream();
    int nextByte;
    //讀取流中的每一個(gè)字節(jié),直到遇到定界符
    while ((nextByte=in.read())!=DELIMITER){
      if (nextByte==-1){
        //如果遇到定界符之前就到了流的終點(diǎn)
        if (messageBuffer.size()==0){
          return null;
        }else {
          //如果存入緩存區(qū)之前有數(shù)據(jù),拋出異常
          throw new EOFException("Non-empty message without delimiter");
        }
      }
      //將無定界符的字節(jié)寫入消息緩存區(qū)
      messageBuffer.write(nextByte);
    }
    //將消息緩存區(qū)的內(nèi)容以字節(jié)數(shù)組的形式返回
    return messageBuffer.toByteArray();
  }
}

以上所述是小編給大家介紹的Java的TCP/IP編程學(xué)習(xí)--基于定界符的成幀詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • java實(shí)現(xiàn)web實(shí)時(shí)消息推送的七種方案

    java實(shí)現(xiàn)web實(shí)時(shí)消息推送的七種方案

    這篇文章主要為大家介紹了java實(shí)現(xiàn)web實(shí)時(shí)消息推送的七種方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Spring?Cloud?使用?Resilience4j?實(shí)現(xiàn)服務(wù)熔斷的方法

    Spring?Cloud?使用?Resilience4j?實(shí)現(xiàn)服務(wù)熔斷的方法

    服務(wù)熔斷是為了保護(hù)我們的服務(wù),比如當(dāng)某個(gè)服務(wù)出現(xiàn)問題的時(shí)候,控制打向它的流量,讓它有時(shí)間去恢復(fù),或者限制一段時(shí)間只能有固定數(shù)量的請(qǐng)求打向這個(gè)服務(wù),這篇文章主要介紹了Spring?Cloud?使用?Resilience4j?實(shí)現(xiàn)服務(wù)熔斷,需要的朋友可以參考下
    2022-12-12
  • 詳解Java中如何使用日志庫在代碼中添加日志

    詳解Java中如何使用日志庫在代碼中添加日志

    這篇文章主要為大家介紹了Java中如何使用日志庫在代碼中添加日志詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java設(shè)計(jì)模式之適配器模式詳解

    Java設(shè)計(jì)模式之適配器模式詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之適配器模式詳解,適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另一個(gè)接口,Adapter模式使得原本由于接口不兼容而不能一起工作的哪些類可以一起工作,需要的朋友可以參考下
    2023-09-09
  • Mybatis查不到數(shù)據(jù)查詢返回Null問題

    Mybatis查不到數(shù)據(jù)查詢返回Null問題

    mybatis突然查不到數(shù)據(jù),查詢返回的都是Null,但是 select count(*) from xxx查詢數(shù)量,返回卻是正常的。好多朋友遇到這樣的問題不知所措,下面小編通過本教程簡單給大家說明下
    2016-08-08
  • 零基礎(chǔ)學(xué)Java:Java開發(fā)工具 Eclipse 安裝過程創(chuàng)建第一個(gè)Java項(xiàng)目及Eclipse的一些基礎(chǔ)使用技巧

    零基礎(chǔ)學(xué)Java:Java開發(fā)工具 Eclipse 安裝過程創(chuàng)建第一個(gè)Java項(xiàng)目及Eclipse的一些基礎(chǔ)使用技巧

    這篇文章主要介紹了零基礎(chǔ)學(xué)Java:Java開發(fā)工具 Eclipse 安裝過程創(chuàng)建第一個(gè)Java項(xiàng)目及Eclipse的一些基礎(chǔ)使用技巧,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • java整合微信支付功能詳細(xì)示例

    java整合微信支付功能詳細(xì)示例

    這篇文章主要給大家介紹了關(guān)于java整合微信支付功能的相關(guān)資料,支付是一個(gè)復(fù)雜且測試起來需要的配置特別復(fù)雜的模塊,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考下
    2023-07-07
  • Java 定時(shí)器(Timer,TimerTask)詳解及實(shí)例代碼

    Java 定時(shí)器(Timer,TimerTask)詳解及實(shí)例代碼

    這篇文章主要介紹了 Java 定時(shí)器(Timer,TimerTask)詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • spring mvc實(shí)現(xiàn)文件上傳與下載功能

    spring mvc實(shí)現(xiàn)文件上傳與下載功能

    這篇文章主要為大家詳細(xì)介紹了spring mvc實(shí)現(xiàn)文件上傳與下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • java二叉樹的非遞歸遍歷

    java二叉樹的非遞歸遍歷

    二叉樹的遞歸遍歷比較簡單,這里就不聊了,今天主要聊聊二叉樹的非遞歸遍歷,主要借助于“?!焙筮M(jìn)先出的特性來保存節(jié)點(diǎn)的順序,先序遍歷和中序遍歷相對(duì)來說比較簡單,重點(diǎn)理解后序遍歷
    2020-12-12

最新評(píng)論

安阳市| 藁城市| 乌鲁木齐市| 温州市| 霍州市| 许昌市| 弥勒县| 汝南县| 丰城市| 涟水县| 宕昌县| 星座| 临邑县| 林甸县| 什邡市| 沅江市| 怀柔区| 江川县| 漯河市| 彰武县| 小金县| 上思县| 饶阳县| 贵港市| 济南市| 富顺县| 都匀市| 兴山县| 盐津县| 龙岩市| 页游| 紫金县| 万载县| 岑巩县| 乌拉特后旗| 湖州市| 阳高县| 应城市| 万年县| 鹰潭市| 莒南县|