小编The*_*Guy的帖子

难以理解对象状态,行为和身份?

我的教授指示我在一个页面上自我介绍,好像我是一个对象,我必须解决三件事:
1)对象状态,2)行为,3)身份.

但是,我仍然对如何做这样的事情感到困惑.(我已经阅读了我必须解决的三个属性,但我不知道如何将它应用于一个人).
例如,有人告诉我,狗会有各种状态,如名称,颜色和品种; 以及行为,例如走路,吠叫或摇尾巴.

那么我会做类似的事情:

Student me = new Student();
System.out.println(me.getName()); //a state?
System.out.println(me.getCurrentActivity()); //A behavior? (if it were to return watching TV or something) 
System.out.println(me.get....()); //???
Run Code Online (Sandbox Code Playgroud)

或者我在这里得到了完全错误的想法?

java state identity behavior object

22
推荐指数
3
解决办法
5万
查看次数

删除字符串中的 0 字节 (UTF-8) 字符

我目前正在编写一款多人游戏,并且正在致力于网络方面的工作。我设置了一个数据包系统,它的工作方式(至少对于字符串)是需要多个字符,最多为“X”个字符。将字符转换为字节以发送到服务器。如果少于 X 个字符,则剩余字节设置为 0。问题是,当在服务器上处理此信息并将其转换为字符串时,0 字节字符是 \\'\xe2\x96\xa1 \' 在我的控制台中,并且在我的 JTextPane 中不可见。如何以干净的方式从字符串中删除所有这些 0 字节字符?我不希望有另一个循环和更多变量,只是为了在转换为字符串之前删除 0 字节。没有人喜欢看起来脏兮兮的代码。:p

\n\n

数据包数据:

\n\n
03100101118000000000971001091051100000000\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • 03 = 数据包 ID(不相关)
  • \n
  • 100101118000000000 = 用户名(“dev”)
  • \n
  • 971001091051100000000 = 密码(“管理员”)
  • \n
\n\n

结果字符串:

\n\n
    \n
  • 用户名字符串 = "dev\xe2\x96\xa1\xe2\x96\xa1\xe2\x96\xa1\xe2\x96\xa1\xe2\x96\xa1\xe2\x96\xa1\xe2\x96\xa1\xe2\x96 \xa1\xe2\x96\xa1"
  • \n
  • 密码字符串 = "admin\xe2\x96\xa1\xe2\x96\xa1\xe2\x96\xa1\xe2\x96\xa1\xe2\x96\xa1\xe2\x96\xa1\xe2\x96\xa1"
  • \n
\n\n

我尝试过的:

\n\n
usernameString.replaceAll(new String(new byte[] {0}, "UTF-8"), "");\npasswordString.replaceAll(new String(new byte[] {0}, "UTF-8"), "");\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,这根本没有改变字符串。

\n

java arrays string network-programming utf-8

4
推荐指数
1
解决办法
5678
查看次数

getClassLoader()。getResource()抛出NullPointerException吗?为什么不出现FileNotFoundException?

我正在尝试在正在处理的程序中加载文件。我通过使用getClassLoader()。getResource()来做到这一点。能够找到该文件时,此方法非常适用。但是,当找不到文件时,它将引发NullPointerException。它不应该抛出FileNotFoundException,或者getResource()不会抛出此类异常吗?

这是代码(相当标准的文件加载):

public static File loadFile(String path) throws FileNotFoundException
{
    return new File(FileHandler.class.getClassLoader().getResource(path).getFile());
}

//somewhere else
loadFile("data/xt.txt");
Run Code Online (Sandbox Code Playgroud)

如果xt.txt存在,则代码可以正常工作。如果不是,则抛出NullPointerException。我可以轻松地修改代码以处理NullPointerException,但我无法想到为什么它首先返回null而不是FileNotFound。

java io file nullpointerexception

3
推荐指数
1
解决办法
1846
查看次数

检测DataInputStream流的结尾

我现在正在服务器上玩游戏.服务器的数据包读取循环是阻塞的,并且通常等待直到收到数据包才能继续循环.但是,如果客户端断开连接,DataInputStream将返回单个字节(-1),并且如预期的那样快速连续执行循环.但是,我不使用DataInputStream的read()方法一次读取一个字节,我使用read(byte [])方法将它们一次性读取到一个字节数组中.因此,我无法轻易检测到流是否返回值为-1的单个字节.

可能的解决方案:我可以检查数组的第一个字节是否为-1,如果是,则循环遍历数组以查看数组的其余部分是否为零.这样做看起来效率极低,我觉得随着客户端数量的增加会影响性能.

这是我的数据包读取循环的简化版本:

while (!thread.isInterrupted() && !isDisconnected())
{
    try
    {
        byte[] data = new byte[26];
        data = new byte[26];

        input.read(data);

        //Need to check if end of stream here somehow
        Packet rawPacket = Packet.extractPacketFromData(data); //Constructs packet from the received data

        if(rawPacket instanceof SomePacket)
        {
            //Do stuff with packet
        }
    }
    catch(IOException e)
    {
        disconnectClient(); //Toggles flag showing client has disconnected
    }
}
Run Code Online (Sandbox Code Playgroud)

java arrays networking packet datainputstream

1
推荐指数
1
解决办法
3255
查看次数