tcpmessageheaderparser.java
来自「关于 RFID 读写器的相关内容」· Java 代码 · 共 64 行
JAVA
64 行
/*
* Copyright (C) 2007 ETH Zurich
*
* This file is part of Fosstrak (www.fosstrak.org).
*
* Fosstrak is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* Fosstrak is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Fosstrak; if not, write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
package org.fosstrak.reader.rprm.core.msg.transport;
import java.io.BufferedReader;
import java.io.IOException;
import java.net.ProtocolException;
public class TcpMessageHeaderParser {
/** TCP protocol specific char that indicates a chunk. */
private final static int NOT_LAST_CHUNK_INDICATOR = (int) '+';
/** TCP protocol specific char that indicates the end of the message header. */
private final static int END_OF_HEADER = (int) ':';
public static TcpMessageHeader readTcpMessageHeader(BufferedReader reader) throws IOException {
boolean isLastChunk = true;
StringBuffer buffer = new StringBuffer();
boolean headerDone = false;
while (!headerDone) {
int r = reader.read();
switch (r) {
case NOT_LAST_CHUNK_INDICATOR:
isLastChunk = false;
break;
case END_OF_HEADER:
headerDone = true;
break;
case -1:
throw new ProtocolException(
"Bad transport format. Premature end of message.");
default:
buffer.append((char) r);
}
}
try {
int bodyLength = Integer.parseInt(buffer.toString());
return new TcpMessageHeader(bodyLength, isLastChunk);
} catch (NumberFormatException e) {
throw new ProtocolException(
"Bad transport format. Could not properly read the message length in the message header.");
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?