使用{}
而不是字符串连接有什么好处吗?
来自slf4j的一个例子
logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);
Run Code Online (Sandbox Code Playgroud)
代替
logger.debug("Temperature set to"+ t + ". Old temperature was " + oldT);
Run Code Online (Sandbox Code Playgroud)
我认为这是关于速度优化的,因为根据配置文件,可以在运行时避免参数评估(和字符串连接).但是只有两个参数是可能的,那么有时除了字符串连接之外别无选择.需要就此问题提出意见.
我已经阅读了关于javascript trim的这个问题,带有正则表达式的答案.
然后我希望修剪去除Hello和World之间的内部空间.
function myFunction() {
alert("Hello World ".trim());
}
Run Code Online (Sandbox Code Playgroud)
EDITED
为什么我期待!?
废话!显然修剪不会移除内部空间!只有前导和尾随,这就是修剪工作的方式,那么这是一个非常错误的问题,我的道歉.
我试图在多个线程中逐行读取套接字的输入.如何中断readLine()
以便我可以优雅地阻止它阻塞的线程?
编辑(赏金):这可以在不关闭套接字的情况下完成吗?
有这个等待声明:
public final native void wait(long timeout) throws InterruptedException;
Run Code Online (Sandbox Code Playgroud)
它可以通过InterruptedException或超时退出,或者因为在另一个线程中调用Notify/NotifyAll方法,Exception很容易捕获但是...
有什么方法可以知道退出原因是超时还是通知?
编辑:
这是一种可行的方法,(虽然我不喜欢)
long tBefore=System.currentTimeMillis();
wait(TIMEOUT);
if ((System.currentTimeMillis() - tBefore) > TIMEOUT)
{
//timeout
}
Run Code Online (Sandbox Code Playgroud) 每个客户都有一个 id 和许多带有日期的发票,这些发票按 id 存储为客户的 Hashmap,按日期存储为发票的哈希图:
HashMap<LocalDateTime, Invoice> allInvoices = allInvoicesAllClients.get(id);
if(allInvoices!=null){
allInvoices.put(date, invoice); //<---REPEATED CODE
}else{
allInvoices = new HashMap<>();
allInvoices.put(date, invoice); //<---REPEATED CODE
allInvoicesAllClients.put(id, allInvoices);
}
Run Code Online (Sandbox Code Playgroud)
Java 解决方案似乎是使用getOrDefault
:
HashMap<LocalDateTime, Invoice> allInvoices = allInvoicesAllClients.getOrDefault(
id,
new HashMap<LocalDateTime, Invoice> (){{ put(date, invoice); }}
);
Run Code Online (Sandbox Code Playgroud)
但是如果 get 不为空,我仍然希望 put (date, invoice) 执行,并且仍然需要向“allInvoicesAllClients”添加数据。所以它似乎没有多大帮助。
我读过WebSockets,但它们似乎不是纯粹的"套接字",因为它们上面有一个应用程序层协议." ws: "
有没有办法从网络浏览器进行纯套接字连接,搞活网页?
这是我在黑暗中的随机刺伤
但是关于HTML5,如果它们不是套接字,为什么它们被称为WebSockets?
websocket协议是如此简单实现,以至于它几乎是"套接字"?
假设Java有两种套接字:
想象一下两个过程的情况:
X =客户
Y =服务器
服务器进程Y:有一个"ServerSocket",即正在侦听TCP端口
客户端进程X:通过"Socket"向Y发送连接请求.
Y:然后该accept()
方法返回一个新的客户端类型"Socket",
当它发生时,两个套接字得到"互连",
所以:客户端进程中的套接字,与服务器进程中的套接字相连.
然后:通过套接字X读/写就像通过套接字Y读/写.
现在,两个客户端套接字互连!!
但是......
如果我在同一个进程中创建两个Client套接字,我想让它们"互连"怎么办?
......甚至可能?
假设如何在不使用中间ServerSocket的情况下使两个客户端套接字互连?
我已经通过创建两个Thread来连续读取A和写B来解决它,而另一个用于读取B和写入A ......
但我认为这可能是更好的方式......(那些世界耗能的线程不是必需的使用客户端 - 服务器方法)
任何帮助或建议将不胜感激!谢谢
编辑:
应用示例:"现有服务器应用程序可以转换为客户端应用程序",例如VNC服务器,一个客户端套接字连接到VNC服务器,并创建其他客户端套接字(连接到中间服务器),然后应用程序互连两个客户端导致VNC服务器是客户端应用程序!然后,不需要公共IP.
VNCServer --- MyApp ---> |中间服务器| <---用户
我在HashSet比较中做了这个测试而equals
没有被调用
当farAway = false时,我想考虑等于(检查两个点距离的函数)
完全可编译的代码,你可以测试它,并告诉为什么在这个例子中没有调用equals.
public class TestClass{
static class Posicion
{
private int x;
private int y;
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Posicion other = (Posicion) obj;
if ( farAway(this.x, other.x, this.y, other.y,5)){
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7; hash = 59 * hash + this.x; hash = 59 * …
Run Code Online (Sandbox Code Playgroud) Perhap这是一个简单的基本问题
有一个枚举
public enum TK{
ID,GROUP,DATA,FAIL;
}
Run Code Online (Sandbox Code Playgroud)
我可以获得订单号,例如ID = 0,GROUP = 2,DATA = 3,FAIL = 4?
这是一种方法,但这是一个奇怪而漫长的方式!= S
public enum TK{
ID(0),GROUP(1),DATA(2),FAIL(3);
int num;
TK(int n)
{
this.num=n;
}
public int get()
{
return num;
}
};
Run Code Online (Sandbox Code Playgroud)
得到数字所以我写TK.ID.get(),TK.GROUP.get()等...我不喜欢那样
有一个更好的方法?
(C enums,C macros ..我想念你们两个)
谢谢
是否有任何用于绘制Petri网并从中生成任何源代码的软件?源代码可以是任何已知的编程语言......
稍微不太理想的选择是输出一个文件,其中只有基于文本的文件中的Petri网图形的描述,采用某种开放格式,如XML或任何其他数据语言.然后我可以自己编写代码生成器,但至少我想避免gui/graph开发部分;))
谢谢
java ×6
sockets ×2
ajax ×1
applet ×1
automation ×1
c ×1
client ×1
comparison ×1
constants ×1
enums ×1
equals ×1
flash ×1
hashmap ×1
hashset ×1
html ×1
java-8 ×1
javascript ×1
logging ×1
notify ×1
optimization ×1
petri-net ×1
serversocket ×1
slf4j ×1
synchronized ×1
trim ×1
wait ×1
websocket ×1