C#到Java byte类型冲突的解决
最近要改写一个核心加密认证类,从C#改写成Java。
发现在调试时,加密的数据无论如何也对不上。
经过跟踪,发现问题出在C#和Java byte类型的区别上:在C#里 byte类型是无符号的,而Java里是有符号的,所以C#里的129到Java里就成了负数。
发现了问题,解决就比较容易了,针对Java的byte,采用Int来进行存储。
通过如下代码从byte到int进行转换:
/**
* from byte to int, because of byte in java is signed
*/
private static int toInt(int b) {
return b >= 0 ? (int)b : (int)(b + 256);
}
对于下面C#的代码:
private static AuthenticationTicket fromByteArray(byte[] buf)
{
MemoryStream ms = new MemoryStream(buf);
BinaryReader reader = new BinaryReader(ms);
short version = reader.ReadInt16();
short scope = reader.ReadInt16();
int key = reader.ReadInt32();
}
改写为如下形式,相当于重新实现BinaryReader的ReadInt16和ReadInt32方法。
private static AuthenticationTicket fromByteArray(int[] bufInt)
{
int version = readInt16(bufInt);
int scope = readInt16(bufInt);
long key = readInt32(bufInt);
}
private static int readInt16(int[] bufInt) {
int i = 0;
for(int j = 0; j < 2; readArrayIndex++, j++) {
i += bufInt[readArrayIndex] << (j << 3);
}
return i;
}
private static long readInt32(int[] bufInt) {
long i = 0;
for(int j = 0; j < 4; readArrayIndex++, j++) {
i += bufInt[readArrayIndex] << (j << 3);
}
return i;
}
上面的例子说明,c#和Java虽然非常相像,但是一些关键细节的不同是需要仔细考虑的。
相关文档:
1.在你觉得有错的地方设置断点
2.点击甲壳虫一样的按钮下面的子按钮,也是甲壳虫一样的,叫Debug
3.运行程序,当程序运行到刚才设置断点的位置就会停下来,并且那行代码底色会高亮显示。
4.接着你在如下界面你可以看到你想要的信息
5.在Variables里面可以查看所有变量的值,比如刚才设置的断点里面的strClassName的值就 ......
关于java的http协议文件上传实用例题一
(2006-07-25 16:43:56)
转载
分类:
java
关于java的http协议上传:(简单实用而且健壮;速度快)
此方法比apache的文件上传包(uploadfile1.1:就文件上传功能而言)要强多了
1.只需要一个MultipartRequest.java基本文件就行。
2.前台html的基本格式
<html ......
eclipse选一个变量后,这个类里的该变量不变色问题解决:
alt + shift + o
/**
* 写入日志
* filePath 日志文件的路径
* code 要写入日志文件的内容
*/
public
static
boolean
print(String filePath,String code) {
try
{
File tofile
=
new
File(filePath);
......
由于有个合作项目,用到了REST,我们这边的服务器是java的,合作方那边主要是PHP环境,为了远程调用的问题,使用了REST作为API的实现方
案。现在项目做得差不多了,下面记下自己的一点心得,算是笔记吧。
REST(Representational State Transfer)的说法来自“Architectural Styles and the Desi ......
在SUN推出 LWUIT开发包之前,在Java ME平台上开发用户界面并不是一件容易的事,尤其是想做出很眩的界面,更是难上加难,这是因为由MIDP本身提供的用户界面元素,包javax.microedition.lcdui
中提供的组件功能相对简单。
使用 LWUIT 开发包,开发人员不再需要编写与设备屏幕大小相关的代码,它采用了与Swing 相似的概念提 ......