JavaのTCP/IPプログラミング学習--デリミタベースのフレーム化

9514 ワード

一、境界符号フレーム
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='
'
; 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; // , while ((nextByte=in.read())!=DELIMITER){ if (nextByte==-1){ // if (messageBuffer.size()==0){ return null; }else { // , throw new EOFException("Non-empty message without delimiter"); } } // messageBuffer.write(nextByte); } // return messageBuffer.toByteArray(); } }