用java解析报文 有什么用(java中报文啥时候用呢一直搞不懂)
老铁们,大家好,相信还有很多朋友对于用java解析报文 有什么用和java中报文啥时候用呢一直搞不懂的相关问题不太懂,没关系,今天就由我来为大家分享分享用java解析报文 有什么用以及java中报文啥时候用呢一直搞不懂的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
java中报文啥时候用呢一直搞不懂
你可以了解一下http协议
报文就是一组客户端和服务端都认可的信息数据。可以是xml形式,json格式。等等
比如有一个android客户端向服务端发送登陆报文
<user>
<username>baidu</username>
<password>123456</password>
</user>
这段由客户端到服务端的xml,就可以视为一个上行报文
服务端收到报文后会返回登陆成功或者失败的信息
比如:200(成功)
404(失败)
甚至返回更详细的失败信息等等这个由服务端到客户端的返回信息同样可以是多样性,可视为下行报文
用的java,通信协议中上下行报文是什么意思
你可以了解一下http协议
报文就是一组客户端和服务端都认可的信息数据。可以是xml形式,json格式。等等
比如有一个android客户端向服务端发送登陆报文
<user>
<username>baidu</username>
<password>123456</password>
</user>
这段由客户端到服务端的xml,就可以视为一个上行报文
服务端收到报文后会返回登陆成功或者失败的信息
比如:200(成功)
404(失败)
甚至返回更详细的失败信息等等这个由服务端到客户端的返回信息同样可以是多样性,可视为下行报文
如何实现java解析网络协议报文
普通参数:
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
文件参数:
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
参数实体的最后一行是:--加上boundary加上--,最后换行,这里的格式即为:--OCqxMF6-JxtxoMDHmoG5W5eY9MGRsTBp--。
模拟文件上传请求
public static void uploadFile(String fileName){
try{
//换行符
final String newLine="\r\n";
final String boundaryPrefix="--";
//定义数据分隔线
String BOUNDARY="========7d4a6d158c9";
//服务器的域名
URL url= new URL("www.myhost.com");
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
//设置为POST情
conn.setRequestMethod("POST");
//发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
//设置请求头参数
conn.setRequestProperty("connection","Keep-Alive");
conn.setRequestProperty("Charsert","UTF-8");
conn.setRequestProperty("Content-Type","multipart/form-data; boundary="+ BOUNDARY);
OutputStream out= new DataOutputStream(conn.getOutputStream());
//上传文件
File file= new File(fileName);
StringBuilder sb= new StringBuilder();
sb.append(boundaryPrefix);
sb.append(BOUNDARY);
sb.append(newLine);
//文件参数,photo参数名可以随意修改
sb.append("Content-Disposition: form-data;name=\"photo\";filename=\""+ fileName
+"\""+ newLine);
sb.append("Content-Type:application/octet-stream");
//参数头设置完以后需要两个换行,然后才是参数内容
sb.append(newLine);
sb.append(newLine);
//将参数头的数据写入到输出流中
out.write(sb.toString().getBytes());
//数据输入流,用于读取文件数据
DataInputStream in= new DataInputStream(new FileInputStream(
file));
byte[] bufferOut= new byte[1024];
int bytes= 0;
//每次读1KB数据,并且将文件数据写入到输出流中
while((bytes= in.read(bufferOut))!=-1){
out.write(bufferOut, 0, bytes);
}
//最后添加换行
out.write(newLine.getBytes());
in.close();
//定义最后数据分隔线,即--加上BOUNDARY再加上--。
byte[] end_data=(newLine+ boundaryPrefix+ BOUNDARY+ boundaryPrefix+ newLine)
.getBytes();
//写上结尾标识
out.write(end_data);
out.flush();
out.close();
//定义BufferedReader输入流来读取URL的响应
// BufferedReader reader= new BufferedReader(new InputStreamReader(
// conn.getInputStream()));
// String line= null;
// while((line= reader.readLine())!= null){
// System.out.println(line);
//}
} catch(Exception e){
System.out.println("发送POST请求出现异常!"+ e);
e.printStackTrace();
}
}
heapbuffer报文java怎么解析
heap buffer和 direct buffer区别
在Java的NIO中,我们一般采用ByteBuffer缓冲区来传输数据,一般情况下我们创建Buffer对象是通过ByteBuffer的两个静态方法:
ByteBuffer.allocate(int capacity);
ByteBuffer.wrap(byte[] array);
查看JDK的NIO的源代码关于这两个部分:
/**allocate()函数的源码**/
public static ByteBuffer allocate(int capacity){
if(capacity< 0)
throw new IllegalArgumentException();
return new HeapByteBuffer(capacity, capacity);
}
/**wrap()函数的源码**/
public static ByteBuffer wrap(byte[] array){
return wrap(array, 0, array.length);
}
//
public static ByteBuffer wrap(byte[] array,
int offset, int length)
{
try{
return new HeapByteBuffer(array, offset, length);
} catch(IllegalArgumentException x){
throw new IndexOutOfBoundsException();
}
}
我们可以很清楚的发现,这两个方法都是实例化HeapByteBuffer来创建的ByteBuffer对象,也就是heap buffer.其实除了heap buffer以外还有一种buffer,叫做direct buffer。我们也可以创建这一种buffer,通过ByteBuffer.allocateDirect(int capacity)方法,查看JDK源码如下:
public static ByteBuffer allocateDirect(int capacity){
return new DirectByteBuffer(capacity);
}
我们发现该函数调用的是DirectByteBuffer(capacity)这个类,这个类就是创建了direct buffer。
好了,关于用java解析报文 有什么用和java中报文啥时候用呢一直搞不懂的问题到这里结束啦,希望可以解决您的问题哈!