问两个Java语言的基本问题(100分)

  • 主题发起人 主题发起人 一个过客
  • 开始时间 开始时间

一个过客

Unregistered / Unconfirmed
GUEST, unregistred user!
1、Java里面怎样使用delphi的word数据类型?即无符号短整型Unsigned short.
范围大小0-65535。java内置的short是有符号的,-32767-32768。类似问题还包括
byte类型,我希望使用0-255的数据类型,可java的byte是-127-128
2、java里面用new xxx(...)创建的对象,怎样手动释放掉? 我知道java可以自动
垃圾收集,可是毕竟不是很及时,如果调用System.gc(),似乎又有点太浪费时间。
 
再加一个:
3、java程序中有两个函数,func1构造一个流,写入一些数据,传递给func2,func2
读取流中的数据:
void func1()
{
Stream st = new Stream(...);
st.write();
func2(st);
}
void func2(Stream st)
{
st.read();
}
我不知道上面的Stream该用什么类型的流? java里面定义的流类型太多了,花眼了,
还要区分什么InputStream/OutputStream,总觉得没有delphi的TMemoryStream方便。
 
1.java没有无符号数
2.不能手动释放
3.InputStream/OutputStream很好区分,一个只读/一个只写。
PipedInputStream和PipedOutStream允许将一个输入流挂上一个输出流。
要想更方便,就用RamdomAccessFile或者ByteArrayOutputStream和ByteArrayInputStream
 
2、没有无符号数,那么是不是意味着,如果我想表示60000这个数,就必须用int类型,
并且占用4各字节?
3、我的问题就是“一个只读/一个只写“,如果我在func1里面写数据,那么只能使用
OutputStream,但是在func2里面读取数据的时候,又只能使用InputStream,而java
又不能像在delphi例那样强制类型转化,也就是说[red]func1里面的OutputStream不能传递到
func2里面当成InputStream使用[/red]啊!
另外,由于读写数据比较特殊,必须用DataOutputStream/DataInputStream类的
writeint()/writebyte()等方法。
PipedInputStream和PipedOutStream我也看了一下,似乎有些用处,但是他们的构造函数
必须要一个对应的Piped类的Stream,比如PipedInputStream必须需要一个PipedOutputStream
来构造,问题是这个PipedOutputStream从哪来呢?我需要的是一个DataOutputStream
 
先回答这个:
2、没有无符号数,那么是不是意味着,如果我想表示60000这个数,就必须用int类型,
并且占用4各字节?
你想用short存60000是可以的
这样用:
int iTemp = 60000;
short sTemp = (short)(iTemp &
0xffff);
要想从sTemp中取出6000,得这样:
int iTemp2 = sTemp &
0xffff;
总之就是把short当2个字节的内存看
import java.io.*;

public class JavaTest
{
public static void main(String args[]) {
int iTemp = 60000;
System.out.println(iTemp);
short sTemp = (short)(iTemp &
0xffff);
System.out.println(sTemp);
short sTemp2 = (short)(iTemp);
System.out.println(sTemp2);
int iTemp2 = sTemp &
0xffff;
System.out.println(iTemp2);
int iTemp3 = sTemp;
System.out.println(iTemp3);
}
}
结果:
60000
-5536
-5536
60000
-5536
 
new一个stream的时候都有一个参数的,解决你的问题就是
搞定这个参数,这个不容易说清楚。你得告诉我你具体要干什么。
 
是这样的:
我需要在一个函数里面写一系列数据,然后传给另一个函数读取。
写的是一些类型数据,比如int,byte,....,所以准备读写的时候用
DataInputStream/DataoutputStream类的流来实现:
Stream.writeInt();
Stream.writeByte();
(如果有别的比较方便/高效的方式也请提供)。
那么我就得把这个写好的Input流传递给另一个函数。在这另一个函数里面,
要读取的话它必须是Output流,这就是我的矛盾。
当然,如果不用流实现也可以,比如两个函数之间传递字节数组bytes[],
但是如果我使用bytes[],那么类似writeInt[]这样的操作就比较麻烦,还要
考虑数据在内存里面的存放方式,而且读取的时候也会遇到这个麻烦。正是
为了避免这个麻烦,我才决定用DataoutputStream/datainputstream的。
 
import java.io.*;
public class JavaTest2 {
public static void main(String s[]) {
try {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
DataOutputStreamdo
ut = new DataOutputStream(byteOut);
do
ut.writeInt(60000);
do
ut.writeByte(126);
do
ut.flush();
byte buf[] = byteOut.toByteArray();
byteOut.close();
ByteArrayInputStream byteIn = new ByteArrayInputStream(buf);
DataInputStream dIn = new DataInputStream(byteIn);
int iRead = dIn.readInt();
byte bRead = dIn.readByte();
byteIn.close();
System.out.println(iRead);
System.out.println(bRead);
} catch ( IOException e ) {
System.out.println("IOException");
}
}
}
 
结果:
60000
126
该给分了!
 
接受答案了.
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部