JPA 本质上是 JDBC 的更高抽象。EntityManager 有一个 API setAutoFlushMode。它可以设置为 AUTO 或 COMMIT。在 JDBC 术语中,这相当于什么?谢谢
我编写了一个在文件中写入值的守护进程。我观察到,当我继续在文件上写入时,文件中没有任何可见内容。另一方面,如果我使用fflush()方法,那么字符在文件中可见。为什么 fflush() 会有所不同?
我只想在屏幕上显示一项,我想这应该用 print(...,lush=True) 来完成,但它不能按我的预期工作。
for i in range(0,100):
print(i, end='', flush=True)
Run Code Online (Sandbox Code Playgroud)
现在我得到这样的数字012345678....,我想在屏幕上看到的只是一个数字,而没有看到以前的打印结果,因此在第一次迭代时,它只显示0第二个显示1,我认为齐平可以解决问题,但事实并非如此,我在哪里我错了?
我有一个Java客户端,它将UTF-8字符串发送到C#TCP-Server,我正在使用DataOutputStream来发送字符串.代码如下所示:
public void sendUTF8String(String ar) {
if (socket.isConnected()) {
try {
dataOutputStream.write(ar.getBytes(Charset.forName("UTF-8")));
dataOutputStream.flush();
} catch (IOException e) {
handleException(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,冲洗似乎不正常.如果我发送两个字符串彼此接近,服务器只接收一个包含两个字符串的消息.如果我在调用之间执行Thread.sleep(1000),整个过程都有效,这显然不是解决方案.我错过了什么?
我认为flush();至少可以使用Google/Stackoverflow告诉我的功能,但是在我的Windows WAMP(Windows,Apache,MySQL,PHP)系统上,它不起作用.
是否有一些PHP设置我必须设置为使flush()工作?
这是我的代码:
<?php
echo "Fun";
flush();
sleep(5);
echo "<br>Mo";
?>
Run Code Online (Sandbox Code Playgroud)
当脚本完成执行时(5秒后),代码只会输出所有内容.我不想要这个,我希望'Fun'立即显示,然后在5秒后'Mo'.
我已经尝试了其他类似的冲洗,ob_end_flush(); or ob_implicit_flush(true);但没有任何工作.有任何想法吗?
我已经实现了一个Java程序,它通过ServerSocket从GPS设备读取数据.
ServerSocket serverSocket = new ServerSocket(13811);
serverSocket.setReceiveBufferSize(receiveBufferSize);
Socket incomingSocket = serverSocket.accept();
InputStream stream = incomingSocket.getInputStream();
byte[] buffer = new byte[1000];
StringBuffer sb = new StringBuffer();
System.out.println("START getting message from TCP stream: " + dateFormat.format(Calendar.getInstance().getTime()));
while (stream.read(buffer) > 0)
{
sb.append(new String(buffer));
System.out.println(sb.toString());
}
System.out.println("[incomingMessage]: " + incomingMessage);
System.out.println("FINISHED getting message from TCP stream: " + dateFormat.format(Calendar.getInstance().getTime()));
Run Code Online (Sandbox Code Playgroud)
但是,我们发现存在很大的延迟(即Sys out"START ..."和"FINISHED ..."时间之间的偏差很大).花在inputStream.read()上的时间.
如果我使用Java客户端连接到上述服务器端口并向其发送数据,则服务器的inputStream可在几毫秒内读取该消息.下面显示了Java客户端代码.
Socket socket = new Socket("localhost", 13811);
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
String tobesend = "testing message 1";
out.writeBytes(tobesend); …Run Code Online (Sandbox Code Playgroud) 我试图使用BufferedReader缓冲文件中的内容.在这个过程中,我在下面的程序while((line = in.readLine()) != "\n")中给出了一个错误的约束,这给了我一个不希望的输出.
我后来纠正了它,因为while((line = in.readLine()) != "null")它应该能够显示文件中的内容(新文件),但它会继续再次显示相同的错误输出.
import java.io.*;
public class ReaderTest {
public static void main(String[] args) throws IOException{
BufferedReader in = new BufferedReader(new FileReader("/home/a1340/new file"));
String line="";
while((line = in.readLine()) != "\n"){
System.out.println(line);
}
in.close();
}
}
import java.io.*;
public class ReaderTest {
public static void main(String[] args) throws IOException{
BufferedReader in = new BufferedReader(new FileReader("/home/a1340/new file"));
String line="";
while((line = in.readLine()) != "null"){
System.out.println(line);
}
in.close();
}
}
Run Code Online (Sandbox Code Playgroud) 我有两个应用程序First Application将在while循环中持久存储到数据库中,循环将在很长一段时间后结束(例如10-15分钟).但是第二个应用程序需要第一个应用程序已经存储在数据库中的数据,第二个应用程序不能等待第一个应用程序完成.它将在第一个应用程序开始运行后启动. 我在第一个应用程序中使用了EntityManager.flush(),希望第一个应用程序能够立即将数据与数据库同步.这样,处于不同事务中的第二个应用程序就可以开始处理数据了.
这不起作用,flush()方法的目的是什么,以及如何解决我的问题?请帮忙 !!
我一直在努力解决烦人的问题.我正在尝试创建与InventoryItems过期关联的通知实体.
这些InventoryItems是为用户自动生成的,但用户可以编辑它们并单独设置它们的到期日期.保存后,如果InventoryItem具有到期日期,则生成通知实体并将其关联.因此,当实体更新时会创建这些通知实体,因此onPersist事件不起作用.
一切似乎都运行良好,并在按预期保存InventoryItems时生成通知.唯一的问题是,当第一次创建通知时,即使它已正确保存,也不会保存对InventoryItem的更改.即创建了具有正确到期日期的通知,但有效期未保存在InventoryItem上.
这是我的onFlush代码:
public function onFlush(OnFlushEventArgs $args)
{
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
foreach ($uow->getScheduledEntityUpdates() as $entity) {
if ($entity instanceof NotificableInterface) {
if ($entity->generatesNotification()){
$notification = $this->notificationManager->generateNotificationForEntity($entity) ;
if ( $notification ) {
$uow->persist($notification) ;
}
$entity->setNotification($notification) ;
$uow->persist($entity);
$uow->computeChangeSets();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
该问题仅在通知第一次与实体关联时发生,即第一次在InventoryItem上设置到期日期.在更新到期日期的后续实例中,更新将在Notification和InventoryItem上正确反映.
任何想法或建议将不胜感激.
谢谢
我正在用python 2.7编写
我有以下代码:
a = 0
b = 0
while True:
a += 1
b += 1
print str(a)
print str(b)
Run Code Online (Sandbox Code Playgroud)
输出如下:
1
1
2
2
3
3
4
....
Run Code Online (Sandbox Code Playgroud)
并希望用这两行冲洗stdout.flush().代码看起来像这样,但它不起作用..
import sys
a = 0
b = 0
while True:
a += 1
b += 1
sys.stdout.write(str(a)+"\n")
sys.stdout.write(str(b)+"\r")
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
这会产生如下输出:
1 #1
2 #1 ->#2
3 #2 ->#3
4 #3 ->#4
...
Run Code Online (Sandbox Code Playgroud)
我知道这是因为\r只跳到第二行的开头,然后从下一个打印开始..
如何将光标设置为第1行的开头而不是第2行?
所以它只刷新2行:
n #1 ->#2 ->#3 ->#4 ->#.....
n #1 ->#2 ->#3 …Run Code Online (Sandbox Code Playgroud) flush ×10
java ×3
python ×2
tcp ×2
autoflush ×1
buffering ×1
c ×1
doctrine-orm ×1
file-io ×1
hibernate ×1
inputstream ×1
jpa ×1
linux ×1
php ×1
python-2.7 ×1
python-3.8 ×1
python-3.x ×1
sockets ×1
stdout ×1
symfony ×1
sys ×1
windows ×1