我找到了几个答案,但它们似乎与Windows机器有关.所以我的问题是管道和插座之间的区别是什么,何时/如何选择一个而不是另一个?
我和朋友正在学习Java.我们今天正在研究接口,我们讨论了如何使用接口.
我朋友给我看的示例代码包含:
IVehicle modeOfTransport1 = new Car();
IVehicle modeOfTransport2 = new Bike();
Run Code Online (Sandbox Code Playgroud)
其中IVehicle的是,在这两款车和自行车类实现的接口.定义接受IVehicle作为参数的方法时,可以使用接口方法,当运行代码时,上述对象正常工作.然而,当您按照通常的意愿声明汽车和自行车时,这非常适用:
Car modeOfTransport1 = new Car();
Bike modeOfTransport2 = new Bike();
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是 - 为什么在声明和实例化modeOfTransport对象时,你会使用前一种方法而不是后者?有关系吗?
在我的笔记本电脑(Windows 10)或我们的开发服务器(CentOS)上运行此Java服务,一切都按预期工作.但是当我在我们的实时服务器(CentOS)上运行它时,我收到以下错误:
09/Sep/2016 08:31:07,005 [ERROR] [pool-2-thread-2] - EmailSender: A Messaging exception occurred in EmailSender
javax.mail.MessagingException: [EOF]
at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1363) ~[jar:rsrc:mail-1.4.jar!/:?]
at com.sun.mail.smtp.SMTPTransport.helo(SMTPTransport.java:838) ~[jar:rsrc:mail-1.4.jar!/:?]
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:375) ~[jar:rsrc:mail-1.4.jar!/:?]
at javax.mail.Service.connect(Service.java:275) ~[jar:rsrc:mail-1.4.jar!/:?]
at javax.mail.Service.connect(Service.java:156) ~[jar:rsrc:mail-1.4.jar!/:?]
at com.awesomecompany.messaging.server.EmailSender.sendEmail(EmailSender.java:99) [rsrc:./:?]
at com.awesomecompany.messaging.server.MonitorDevicesRunnable.run(MonitorDevicesRunnable.java:82) [rsrc:./:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [?:1.7.0_75]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) [?:1.7.0_75]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) [?:1.7.0_75]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:1.7.0_75]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_75]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_75]
at java.lang.Thread.run(Thread.java:745) [?:1.7.0_75]
Run Code Online (Sandbox Code Playgroud)
我的邮箱代码:
public void sendEmail(User user) {
to[0] = user.getEmail();
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", password);
props.put("mail.smtp.port", "587"); …Run Code Online (Sandbox Code Playgroud) 例如,我有一个带有 5 个参数的构建器的类,而不是我手动选择参数并填充它们,有没有办法告诉 Intellij 执行此操作:
MyClass myClass = MyClass.builder()
.param1()
.param2()
.param3()
.param4()
.param5()
.build();
Run Code Online (Sandbox Code Playgroud)
然后我就可以自己填参数了。确保我没有错过任何东西会很方便。
或者,我可以将自动完成选项设置为按照它们在类中出现的顺序进行排序吗?
就像标题所说的那样,只是寻找一个与客户端匹配的字符串,以完成通过套接字发送数据的操作,因此,我可能正在寻找类似{"Message" : "END"}JSON字符串的内容。一个最多的字符串将是几百个字符长。
我有一个弹簧启动应用程序,它有一个休息控制器,返回字符串和文本文件.我想跟踪服务器端的下载进度,并将消息推送到队列.
使用a时,HttpServlet我只是OutputStream从HttpResponse对象中获取了一个并将字节推到套接字上,计算进度,如下所示:
byte[] buffer = new byte[10];
int bytesRead = -1;
double totalBytes = 0d;
double fileSize = file.length();
while ((bytesRead = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, bytesRead);
totalBytes += bytesRead;
queueClient.sendMessage(
"job: " + job + "; percent complete: " + ((int) (totalBytes / fileSize) * 100));
}
Run Code Online (Sandbox Code Playgroud)
然而,有了Spring Boot,因为很多东西都发生在我的引擎盖下,我不是百分之百确定如何处理它.
我刚刚开始使用Spring Boot,所以对我很轻松!我Controller目前看起来像这样:
@RestController
@RequestMapping("/api/v1/")
public class MyController {
@Autowired
QueueClient queue;
@RequestMapping(value = "info/{id}", method = RequestMethod.GET)
public String get(@PathVariable …Run Code Online (Sandbox Code Playgroud) 我在本地文件系统上有一堆文件.我的服务器将提供这些文件.在某些情况下,服务器将收到删除文件的指令.目前我正在使用FileChannel.lock()锁定文件,这主要是为了确保在我尝试删除文件时其他一些进程没有编辑该文件.
如果我成功获取了锁,我可以立即删除该文件,还是需要先释放锁?
像这样:
FileOutputStream out = new FileOutputStream(file);
FileChannel channel = out.getChannel();
FileLock lock = channel.lock();
if(lock.isValid() && !lock.isShared()){
Path filePath = Paths.get(file.getPath());
Files.delete(filePath);
}
Run Code Online (Sandbox Code Playgroud)
我删除文件后是否需要释放锁定?
或者应该是这样(lock.release()添加):
FileOutputStream out = new FileOutputStream(file);
FileChannel channel = out.getChannel();
FileLock lock = channel.lock();
if(lock.isValid() && !lock.isShared()){
lock.release();
Path filePath = Paths.get(file.getPath());
Files.delete(filePath);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
所以事实证明上面的代码无论如何都不会工作,因为你不能用a修改文件FileInputStream,当然,它只是只读.我已修改上面的代码FileOutputStream而不是使用它,但它仍然不能正常工作,因为即使我从通道释放锁,该file对象仍然有一个锁.所以我像这样修改了代码:
FileOutputStream out = new FileOutputStream(file);
FileChannel channel = out.getChannel();
FileLock lock = channel.lock();
if(lock.isValid() && !lock.isShared()){
channel.close();
boolean …Run Code Online (Sandbox Code Playgroud) 像这样:
public void myMethod(InputStream fileIn){
try (InputStream in = fileIn) {
do stuff....
}
}
Run Code Online (Sandbox Code Playgroud)
它似乎工作.安全吗?
我正在努力平衡我的EditText观点。但我似乎无法让它们正确排列,而且我无法增加EditText. 起初我尝试使用RelativeLayout,这使我能够准确地定位物体,但尺寸仍然不正确。我想如果我切换到水平LinearLayout,那么我可以调整两个字段,layout_weight并且EditText会自动填充空间,但情况似乎并非如此。有什么建议吗?LinearLayout当在屏幕上显示时,此自定义视图会添加到垂直方向。
我的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="1dp"
android:weightSum="1"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.6"
android:gravity="center_vertical"
android:textColor="@color/ws_blue"
android:background="#00ffff"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Settings Item: "
android:id="@+id/itemLabel" />
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.4"
android:textColor="@color/ws_blue"
android:textColorHint="@color/ws_hint"
android:background="#ffff00"
android:id="@+id/et_item_value" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
Android Studio预览:
我手机上的实际截图:
android android-layout android-linearlayout android-edittext
所以我遇到了这种奇怪的情况。
我正在对 4 次提交进行交互式变基。我尝试挤压,但我做错了,出现以下错误:
error: cannot 'squash' without a previous commit You can fix this with
'git rebase --edit-todo' and then run 'git rebase --continue'. Or you
can abort the rebase with 'git rebase --abort'.
Run Code Online (Sandbox Code Playgroud)
我决定运行git rebase --edit-todo,当我这样做时,只出现了最后一次提交。我将其从 更改为squash,pick然后运行git rebase --continue,但现在看来我试图压缩的其他 3 个提交已经不存在了。
所以我早上的工作似乎失败了。
一定有办法恢复这些,对吗?
我该怎么做?
java ×7
android ×1
autocomplete ×1
builder ×1
centos ×1
delete-file ×1
filelock ×1
git ×1
github ×1
gitlab ×1
inputstream ×1
interface ×1
io ×1
jakarta-mail ×1
linux ×1
networking ×1
nio ×1
oop ×1
polymorphism ×1
regex ×1
rest ×1
spring ×1
spring-boot ×1
string ×1
tcp ×1