我在使用RIM压缩API时遇到了一个奇怪的问题,我无法使其工作,因为它在文档中有描述.
如果我使用win gzip工具 gzip纯文本文件,将gz添加到blackberry项目的资源中并在app中尝试解压缩,将会有无限循环,gzis.read()永远不会返回-1 ...
try
{
InputStream inputStream = getClass().getResourceAsStream("test.gz");
GZIPInputStream gzis = new GZIPInputStream(inputStream);
StringBuffer sb = new StringBuffer();
char c;
while ((c = (char)gzis.read()) != -1)
{
sb.append(c);
}
String data = sb.toString();
add(new RichTextField(data));
gzis.close();
}
catch(IOException ioe)
{
}
Run Code Online (Sandbox Code Playgroud)
在压缩内容之后,gzis.read()中重复65535值.我发现的唯一解决方法是愚蠢的
while ((c = (char)gzis.read()) != -1 && c != 65535)
Run Code Online (Sandbox Code Playgroud)
但我很好奇是什么原因,我做错了什么,为什么65535?
我有这样的功能:
float_as_thousands_str_with_precision(value, precision)
Run Code Online (Sandbox Code Playgroud)
如果我像这样使用它:
float_as_thousands_str_with_precision(volts, 1)
float_as_thousands_str_with_precision(amps, 2)
float_as_thousands_str_with_precision(watts, 2)
Run Code Online (Sandbox Code Playgroud)
那些1/2的神奇数字吗?
考虑以下代码段...
public static UserStatus getEnum(int code) {
switch (code) {
case 0:
return PENDING;
case 1:
return ACTIVE;
case 2:
return SUSPENDED;
case 3:
return DELETED;
case 4:
return LOGIN_DISABLED;
default:
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,案件中的第3和第4(案例3和案例4)被SONAR检测为幻数.
为了避免这个问题,我改变了我的代码段如下...
public static UserStatus getEnum(int code) {
final int Pending=0;
final int Active=1;
final int Suspended=2;
final int Deleted= 3;
final int Login_details=4;
switch (code) {
case Pending:
return PENDING;
case Active:
return ACTIVE;
case Suspended:
return SUSPENDED;
case Deleted:
return DELETED;
case Login_details: …Run Code Online (Sandbox Code Playgroud) 文件按文件扩展名分类.所以我的问题是,即使文件扩展名已被更改,如何识别文件类型.
例如,我有一个名称的视频文件myVideo.mp4,我已将其更改为myVideo.txt.因此,如果我双击它,首选文本编辑器将打开该文件,并不会打开确切的内容.但是,如果我myVideo.txt在视频播放器中播放,视频将播放没有任何问题.
我只是想开发一个应用程序来确定文件类型而不检查文件扩展名并建议打开文件的软件.我想用Java开发应用程序.
如何在不宣布大量决赛或静态决赛的情况下摆脱java中的魔术数字?请记住循环,不允许使用数组.这似乎不可能?帮助赞赏.谢谢.
示例代码:
drawOval(5, 5, width, height);
drawOval(10, 10, width, height);
drawOval(15, 15, width, height);
drawOval(20, 20, width, height);
drawOval(25, 25, width, height);
Run Code Online (Sandbox Code Playgroud) 如何创建保留指针值?
上下文是这样的:我一直在考虑如何为动态脚本语言实现数据结构(我不打算实现它 - 只是想知道它将如何完成).
字符串可以包含任意字节,包括NUL.因此,有必要单独存储该值.这需要一个指针(指向数组)和一个数字.第一个技巧是如果指针为NULL,则它不可能是有效字符串,因此该数字可用于实际整数.
如果可以创建第二个保留指针值,则可以用来暗示另一个字段现在被用作浮点值.可以这样做吗?
一种想法是mmap()一个没有权限的地址,也可以用来替换NULL指针的用法.
我写了一个通用函数来将二进制反射的格雷码转换为标准二进制.我使用了本页找到的算法.这是上述算法:
unsigned short grayToBinary(unsigned short num)
{
unsigned short temp = num ^ (num>>8);
temp ^= (temp>>4);
temp ^= (temp>>2);
temp ^= (temp>>1);
return temp;
}
Run Code Online (Sandbox Code Playgroud)
然后我修改了代码,使其适用于任何标准unsigned类型.这是我写的:
template<typename Uint>
Uint grayToBinary(Uint value)
{
for (Uint mask = sizeof(Uint)*4 ; mask ; mask >>= 1)
{
value ^= value >> mask;
}
return value;
}
Run Code Online (Sandbox Code Playgroud)
该算法似乎适用于每种unsigned标准类型.然而,在写它时,我本能地使用,sizeof(Uint)*4因为它有意义的结束条件将取决于类型大小,但事实是我不知道sizeof(Uint)*4实际代表什么.就目前而言,这是我本能地写的一个神奇的数字,但我无法解释为什么它适用*4而不是任何其他系数.
有人知道这个神奇数字实际上对应的是什么吗?
有没有办法在Java中找到所有硬编码的数字和字符串?我的意思是没有放入专用变量的值.
例如 :
while (i < 6) {
System.out.println("6 is a number"); // Hard Coded, "Magic" String
}
Run Code Online (Sandbox Code Playgroud)
我得到了SonarQube的建议,但我不知道如何使用它.
所以我试图摆脱我的主要方法中的两个神奇数字。我尝试将它们设置为静态字段,但我只是收到不同的检查样式错误。我正在寻找一种方法来使我的主要方法完全通过 checkstyle 进行检查。
这些是我得到的检查样式错误:
“2000”是一个神奇的数字
“262”是一个神奇的数字
当我将它们设置为静态字段时,这些是检查样式错误:
名称“twothou”必须与模式“^[AZ][A-Z0-9]*(_[A-Z0-9]+)*$”匹配。
名称“twosixtytwo”必须与模式“^[AZ][A-Z0-9]*(_[A-Z0-9]+)*$”匹配。
PS如果我尝试使变量非静态,它不会让我编译。谢谢您的帮助。
我总是习惯#define在 cpp 文件开头的某个地方定义幻数。我想把它改成const数字。(全局变量在 cpp 文件中声明/定义。)这是个好主意吗?我应该将它们放入匿名命名空间吗?我从不#include在任何地方使用 cpp 文件。
magic-numbers ×10
java ×5
c++ ×3
sonarqube ×2
algorithm ×1
blackberry ×1
c ×1
c++11 ×1
checkstyle ×1
compression ×1
constants ×1
filesystems ×1
gray-code ×1
gzip ×1
namespaces ×1
pointers ×1
type-punning ×1