下面是我的代码替换DataInputStream来包装InputStream,但除了读取大端类型的常规方法之外,还提供了读取小端数据类型的额外方法.如果您愿意,请随意使用.
我有一些保留如下.请注意不改变功能的方法(读取大端类型的函数).我无法将DataInputStream实现为基类并使用其方法,如read(),readInt(),readChar()等?
我的班级层次似乎有点奇怪.这个合适吗?
这些其他类型如readUTF()或readLine()是否需要一个小的endian版本?或者这是特定程序的主观?
Java如何存储布尔类型?对于字节顺序是否也是主观的?
谢谢你满足我的好奇心:)
import java.io.*;
/**
* Replacement for a DataInputStream that provides both little and big endian reading capabilities for convenience without need to implement a ByteBuffer
* @author Bill (unspecified.specification@gmail.com)
*/
public class EndianInputStream extends InputStream implements DataInput {
private DataInputStream dataInStream;
private InputStream inStream;
private byte byteBuffer[];
/**
* Constructor to wrap InputStream for little and big endian data
* @param refInStream Inputstream to wrap
*/
public EndianInputStream(InputStream refInStream) {
inStream = refInStream;
dataInStream …Run Code Online (Sandbox Code Playgroud) 有必要使用后缀定界符来表示源代码中使用的常量类型,例如L表示长.但是,对于short和bytes,没有分隔符,所以我需要显式地转换常量值,如下所示:
short x = (short)0x8000;
Run Code Online (Sandbox Code Playgroud)
我想知道Java是否在编译的字节码中采取额外的步骤来实际将其从整数类型转换为short,或者它是否知道这将适合一个单词并使用常量?否则,有没有一种方法可以将这些数字作为后缀来表示短或字节?
我有一个算法如下找到一条线的中心(中点).
public DoublePoint getMidPoint() {
return new DoublePoint((origin.x + endPoint.x) / 2, (origin.y + endPoint.y) / 2);
}
Run Code Online (Sandbox Code Playgroud)
它似乎适用于任何价值观.但我似乎记得一个更复杂的算法,涉及两个圆,其半径等于线的长度,其中心点是线的末端.从这些圆的交点绘制的线将与您正在测试的线段相交,从而得到线的中点.我确信算法可以100%的时间运行.不确定我的简单算法看起来太简单了.
似乎无法找到任何关于输入流"阻塞"的内容,它描述了它是什么以及何时发生.这是某种类型的多线程防止并发线程访问相同的流吗?
在这方面,当两个并发线程同时访问同一个流时,这会导致问题,还是两个线程都获得自己的流指针?显然,人们需要等待,但希望它不会导致未经检查的异常.
在Java程序中,当需要分配数千个类似大小的对象时,(在我看来)最好有一个"池"(这是一个单独的分配),其中包含可以在需要时提取的保留项.这个单一的大型分配不会将堆分割成数千个较小的分配.
显然,没有办法专门将对象引用指向内存中的地址(对于其成员字段)来设置池.即使新对象引用了池的某个区域,仍然需要分配对象本身.如果不诉诸本机OS库,您将如何处理这样的许多分配?
java ×4
algorithm ×1
allocation ×1
endianness ×1
io ×1
line ×1
math ×1
memory ×1
point ×1
stream ×1