以前的一个基于SOCKET的报文传输项目,让我知道了什么叫网络字节顺序。在C函数中,有一系列函数支持,如:htons函数(host to net )见:winsock.h。总的意思是:不同的操作系统对 long , doulbe 等的内码字节顺序存储不一样。因此,一般情况下需要转为统一的网络字节顺序才在网络中传输。如:对两个字节长度的整型,使用java转为网络字节顺序的代码为:

public static byte[] hexToNet(int i) {
    byte[] bt = new byte[2];
    bt[1] = (byte) (i & 0xFF); // 底8位
    bt[0] = (byte) ( (i >> 8) & 0xFF); // 高8位。
    return bt;
  }
 ---------------------------------

   周二,我们又碰到了基于TUXEDO的CARRY类型的报文传输。其中要把某位字节值填上0x80。我想使用log4j把这值输出到文本文件来查看。于是使用 new String(b)后输出,使用UltraEdit-32 打开这个日志文本文件,查看ASCII码,发现是:0x3f。而不是想要的0x80

----------------------------------

  使用C来写,是对的,代码如下:

// mytest.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include <string.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>

int main(int argc, char* argv[])
{
    FILE *fp = fopen("D://my.txt", "a");
    unsigned short us1 ;
    us1 = (unsigned short)strlen("PLC001") | 0x08000;
    u_short   us = htons(us1);
    printf("(short)strlen(/"PLC001/") | 0x08000 =%d/n",us1);
    fprintf(fp,"%s",&us,sizeof(u_short));
    fclose(fp);
    return 0;
}

------------------------------------------------------------------------------

   后来经朋友指点,要使用流来输出,而不是log4j的输出。才解决了这个问题:

FileOutputStream fos = null;
      File myFile = new File("D://test.txt");
      byte[] b = new byte[1];
      b[0] = (byte)0x80;
      try{
        if (!myFile.exists()) {
          myFile.createNewFile();
        }
        fos = new FileOutputStream(myFile);
        fos.write(b);
      }
      catch (Exception e) {
        e.printStackTrace();
      }

这时看日志文件,才看到想要看到的结果:0x80
-------------------------------------------------------------------------------

感悟:对java,对字节流处理的基础功课,还真得补一补!

 今天,分析了一下 TUXEDO的CARRY ,其实也是由 byte[]组成的。因此,在网络传输中,肯定也是以 socket的DataOutputStream之类的来 wrrite(byte[])。

网络字节顺序 流操作相关推荐

  1. 【转】大端模式与小端模式、网络字节顺序与主机字节顺序 (经典)

    大端模式与小端模式 一.概念及详解 在各种体系的计算机中通常采用的字节存储机制主要有两种: big-endian和little-endian,即大端模式和小端模式. 先回顾两个关键词,MSB和LSB: ...

  2. java8的stream流操作的数据结构

    在java8的流操作中分为终止符和非终止符. 非终止符不会触发数据的处理. 每次通过stream()方法新建立一个流的时候都会创建一个Head类.这个类是ReferencePipeline的一个内部类 ...

  3. 大端模式、小端模式、网络字节顺序与主机字节顺序

    大端模式.小端模式.网络字节顺序与主机字节顺序 大端模式与小端模式 概念与详解 在各种体系的计算机中通常采用的字节存储机制主要有两种:big-endian和little-endian,即大端模式和小端 ...

  4. 吃透JAVA的Stream流操作,多年实践总结

    在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行处理. 例如,现在有这么一个需求: 从给定句子中返回单词 ...

  5. Java流及流操作示例

    转自公众号:后端技术精选 流 此处的流(Stream)与io中的输入流(InputStream)与输出流(OutputStream)是不同的概念,与实时处理数据的流也是不同的概念,但它们也有相似之处. ...

  6. 网络字节顺序和主机字节顺序的转换(htons ntohs htonl ntohl)

    from  https://blog.csdn.net/baidu_33621692/article/details/53213002 网络字节顺序和主机字节顺序的转换(htons ntohs hto ...

  7. long long 类型的网络字节顺序转换

    long long 类型的网络字节顺序转换 sailor_forever sailing_9806@163.com 转载请注明 http://blog.csdn.net/sailor_8318/arc ...

  8. 深度掌握 Java Stream 流操作,让你的代码高出一个逼格

    概念 Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选.排序.聚合等. Stream` 的操作符大体上分为两种:`中间操作符`和`终止操 ...

  9. 【java基础】吐血总结Stream流操作

    文章目录 Stream流操作讲解 在这里插入图片描述 1 Stream概述 2 Stream与传统遍历对比 3 Stream的创建 4 Stream的使用 4.1 遍历/匹配(foreach.find ...

最新文章

  1. 初识Hibernate之关联映射(一)
  2. 删除 jar 的 asset_【unity游戏开发】SDK学习(1)-C#与jar交互
  3. Redis的持久化机制-RDB方式和AOF方式
  4. Codeforces Round #392(div 2) 758D (贪心)
  5. 使用 RMAN 同步数据库
  6. 单机安装ZooKeeper
  7. Topcoder 658Div2
  8. 服务器gsql密码修改,gsql远程登录
  9. php 中文key_API常用签名验证方法(PHP实现)
  10. 【防守方基础】危险报文识别
  11. 2021-2025年中国准分子飞秒眼科激光器行业市场供需与战略研究报告
  12. 数字证书转换cer---pem
  13. 如何给100亿个数字排序
  14. excel表格怎么调整行高和列宽_excel表格怎么调整高度和宽度
  15. Android 源码 分析
  16. 百度坐标转换中文地址(百度地图JavaScript API逆地址解析 )
  17. 安卓机顶盒安装软件教程
  18. java中如何插入表格_Java如何向Word文档中添加表格?
  19. jsp:使用jsp完成数据的分页显示
  20. go get 指定代理

热门文章

  1. python 安装包时出现红字_Python安装(Windows 7 8 10)
  2. Matlab 常用运算符的用法和功能
  3. MATLAB学习笔记(一)
  4. 百练OJ:1007:DNA排序
  5. 各种数据库连接jdbc
  6. 5G的频谱效率,到底有多高
  7. DevExpress的TreeList怎样设置数据源,从实例入手
  8. DataTables提示:DataTables warning: table id=queueInfo_table - Requested unknown parameter 'type' for r
  9. 熟读《阿里巴巴java开发手册》(一、编程规约)
  10. 【PPT 下载】神策 2017 数据驱动大会干货限时分享!