小编jbu*_*jbu的帖子

在Java中获取数组的一部分而不在堆上创建新数组

我正在寻找一种返回数组片段的Java方法.一个例子是获取包含字节数组的第4和第5个字节的字节数组.我不想在堆内存中创建一个新的字节数组来做到这一点.现在我有以下代码:

doSomethingWithTwoBytes(byte[] twoByteArray);

void someMethod(byte[] bigArray)
{
      byte[] x = {bigArray[4], bigArray[5]};
      doSomethingWithTwoBytes(x);
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以做到doSomething(bigArray.getSubArray(4, 2))4是偏移量,2是长度,例如.

java arrays slice

180
推荐指数
11
解决办法
21万
查看次数

Java同步静态方法:锁定对象或类

Java教程说:"同一个对象上的两个同步方法的调用不可能交错."

这对静态方法意味着什么?由于静态方法没有关联对象,所以synchronized关键字会锁定类,而不是对象吗?

java methods static class synchronized

144
推荐指数
4
解决办法
10万
查看次数

Linux bash(不是主目录)中tilde的含义

首先,我知道这~/是主目录.CD到~~/带我到主目录.

然而,cd ~X带我到一个特殊的地方,X似乎什么都有.

在bash中,如果我点击" cd ~"并点击标签,它会显示一些可能的~X选项,例如~mailand ~postgres~ssh.转到那些文件夹并执行一个pwd向我显示这些文件夹不在主目录中; 他们到处都是.

它们不是别名.我查过了.它们不是env.变量,否则它们需要一个$.

什么是设置这些链接,我在哪里可以找到这些链接的设置位置?

linux bash home-directory

102
推荐指数
6
解决办法
13万
查看次数

junit&java:测试非公共方法

JUnit只会在我的类中测试那些公开的方法.如何对非(即私有,受保护)的进行junit测试?

我可以通过不使用junit来测试它们,但我想知道junit标准方法是什么.

java testing junit unit-testing

100
推荐指数
7
解决办法
7万
查看次数

Java的L号(长)规范

看来,当你在Java中输入一个数字时,编译器会自动将它读作一个整数,这就是为什么当你输入(long)6000000000(不在整数范围内)时,它会抱怨它6000000000不是一个整数.要纠正这个问题,我必须指明6000000000L.我刚刚了解了这个规范.

还有其他数字规格,如short,byte,float,double?这似乎是好事,因为(我假设),如果你可以指定你输入的数字是短的,那么java就不必抛出它 - 这是一个假设,如果我错了,请纠正我.我通常会自己搜索这个问题,但我不知道甚至会调用这种数字规范.

java specifications numbers short long-integer

91
推荐指数
4
解决办法
12万
查看次数

将输入流连接到输出流

java9中的更新:https://docs.oracle.com/javase/9​​/docs/api/java/io/InputStream.html#transferTo-java.io.OutputStream-

我看到了一些相似的,但不是我需要的线程.

我有一个服务器,它基本上从客户端,客户端A接收输入,并逐字节转发到另一个客户端,客户端B.

我想将客户端A的输入流与客户端B的输出流连接起来.这可能吗?有什么方法可以做到这一点?

此外,这些客户端正在发送彼此有时间敏感的消息,因此缓冲不会.我不想要500的缓冲区和客户端发送499个字节,然后我的服务器在转发500个字节时保持关闭,因为它没有收到填充缓冲区的最后一个字节.

现在,我正在解析每条消息以找到它的长度,然后读取长度字节,然后转发它们.我想(并测试)这比读取一个字节并反复转发一个字节更好,因为这将非常慢.我也不想使用缓冲区或计时器,因为我在上一段中说过 - 我不希望消息等待很长时间才能通过,因为缓冲区未满.

这样做的好方法是什么?

java inputstream outputstream

72
推荐指数
6
解决办法
11万
查看次数

java中未知长度的字节数组

我在java中构造一个字节数组,我不知道数组会有多长.

我想要一些像Java的StringBuffer这样的工具你可以调用.append(字节b)或.append(byte [] buf)并让它缓冲我的所有字节并在完成后返回给我一个字节数组.是否有一个类用于StringBuffer为字符串做什么?它看起来不像我正在寻找的ByteBuffer类.

谁有一个很好的解决方案?

java buffer byte

67
推荐指数
2
解决办法
6万
查看次数

Java InputStream阻塞读取

根据java api,InputStream.read()描述为:

如果由于到达流末尾而没有可用字节,则返回值-1.此方法将阻塞,直到输入数据可用,检测到流的末尾或抛出异常.

我有一个while(true)循环执行读取,当通过流发送任何内容时,我总是得到-1.这是预期的.

我的问题是什么时候会读取()阻止?因为如果它没有获得任何数据,则返回-1.我希望阻塞读取等到收到数据.如果你已经到达输入流的末尾,不应该读取()只是等待数据而不是返回-1?

或者read()只阻止是否有另一个线程访问流并且你的read()无法访问流?


这引出了我的下一个问题.我曾经有过事件监听器(由我的库提供),当数据可用时会通知我.当我收到通知时,我会调用while((aByte = read()) > -1)存储字节.当我在非常接近的时间内收到两个事件并且我的所有数据都没有被显示时,我感到很困惑.似乎只显示第二个事件数据的尾端,其余部分丢失了.

我最终改变了我的代码,以便当我得到一个事件时,我会调用if(inputStream.available() > 0) while((aByte = read()) > -1)存储字节.现在它正常工作,我的所有数据都显示出来了.

有人可以解释这种行为吗?该InputStream.available()是说要回,你可以阻止下一个调用方之前读取的字节数(流?).即使我不使用.available(),我希望第一个事件的读取只是阻止第二个事件的读取,但不会擦除或消耗过多的流数据.为什么这样做会导致我的所有数据都不显示?

java inputstream rxtx blocking java-io

52
推荐指数
4
解决办法
9万
查看次数

为什么我不需要检查引用是否无效/ null?

阅读http://www.cprogramming.com/tutorial/references.html,它说:

通常,引用应始终有效,因为您必须始终初始化引用.这意味着除了一些奇怪的情况(见下文),您可以确定使用引用就像使用普通的旧非引用变量一样.您不需要检查以确保引用未指向NULL,并且您不会被未初始化的引用所困扰,您忘记为其分配内存.

我的问题是如何知道在初始化引用后对象的内存未被释放/删除.

它归结为我不能在信仰上接受这个建议,我需要一个更好的解释.

任何人都能解释一下吗?

c++ null reference

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

java socket/output stream写道:它们阻塞了吗?

如果我只是在输出流上写入套接字,它会阻塞吗?只有读取可以阻止,对吧?有人告诉我写入可以阻止,但我只看到套接字读取方法的超时功能 - Socket.setSoTimeout().

对我来说写一个写入可能会阻塞是没有意义的.

java sockets stream

35
推荐指数
2
解决办法
3万
查看次数