Tag: flush

我用autoflush创建了一个PrintWriter; 为什么不自动进行?

我的客户端是一个Web浏览器,并使用以下URL发送请求到myserver: http://localhost 这是服务器端代码。 问题在于ServingThread类的run方法。 class ServingThread implements Runnable{ private Socket socket ; public ServingThread(Socket socket){ this.socket = socket ; System.out.println(“Receives a new browser request from ” + socket + “\n\n”); } public void run() { PrintWriter out = null ; try { String str = “” ; out = new PrintWriter( socket.getOutputStream() ) ; out.write(“This […]

在FlushMode.AUTO背后检查什么?

在Hibernate中,我想知道当flushMode为AUTO时哪些条件会触发刷新? 它可能很复杂(或“魔术”),但基本条件是什么? 谢谢

如何刷新’RandomAccessFile’(java)?

我在java中使用RandomAccessFile: file = new RandomAccessFile(filename, “rw”); … file.writeBytes(…); 如何确保将此数据刷新到操作系统? 没有file.flush()方法。 (请注意,我实际上并不期望它是物理写入的,我很满意它被刷新到操作系统,因此数据将在tomcat崩溃中存活,但不一定是意外的服务器断电)。 我在Linux上使用tomcat6。

为什么我们必须在扩展的PersistenceContext中手动flush()EntityManager?

在我们的J2EE应用程序中,我们使用EJB-3有状态bean来允许前端代码创建,修改和保存持久性实体(通过JPA-2管理)。 它看起来像这样: @LocalBean @Stateful @TransactionAttribute(TransactionAttributeType.NEVER) public class MyEntityController implements Serializable { @PersistenceContext(type = PersistenceContextType.EXTENDED) private EntityManager em; private MyEntity current; public void create() { this.current = new MyEntity(); em.persist(this.current); } public void load(Long id) { this.current = em.find(MyEntity.class, id); } @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void save() { em.flush(); } } 非常重要的是,为了避免过早提交,只有save()方法在一个事务中,所以如果我们调用create() ,我们就不会在数据库中插入任何内容。 奇怪的是,在save()方法中,我们必须调用em.flush()才能真正命中数据库。 事实上,我试过并发现我们也可以调用em.isOpen()或em.getFlushMode() ,以及任何与“em相关”的东西。 我不明白这一点。 由于save()在一个事务中,我认为在方法结束时,事务将被提交,因此持久化实体管理器会自动刷新。 […]

Java文件下载挂起

我有一个用于下载文件的Web界面。 当请求进入时,我的glassfish服务器从Web服务流式传输文件,然后将内容写入输出流。 我的代码工作正常,除非文件大小变得非常大(如超过200 MB),它挂起显示0%已下载到浏览器中,文件永远不会下载。 当我在while循环中移动flush()方法时,它也适用于大文件。 我不确定在循环中放置flush()是否有问题。 不知道这件事实际上是如何运作的。 我的代码如下: HttpURLConnection conn = (HttpURLConnection) downloadUri.toURL().openConnection(); conn.setDoOutput(true); conn.setRequestMethod(“GET”); conn.setRequestProperty(“Content-Type”, “application/pdf”); if (conn.getResponseCode() == 200) { ServletOutputStream output; try (InputStream inputStream = conn.getInputStream()) { HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); response.setContentType(“application/octet-stream”); response.setHeader(“Content-Length”, conn.getHeaderField(“Content-Length”)); response.setHeader(“Content-Disposition”, “attachment; filename=\”” + abbr + “.pdf\””); output = response.getOutputStream(); byte[] buffer = new byte[1024]; int bytesRead; […]

BufferedOutputStream如何实际工作在较低水平?

我理解BufferedOutputStream背后的理论。 字节被写入缓冲区数组直到它已满,然后写入(刷新)到底层流 – 这个想法是它比逐字节写入更快,因为OS调用更少。 但是,从查看BufferedOutputStream类和方法( BufferedOutputStream.java )的实现,似乎最终,缓冲区中的字节只是逐字节写入。 我认为情况是这样的: 在BufferedOutputStream.write(byte b [],int off,int len)中,它有行out.write(b,off,len)。 由于out是OutputStream的实例,而不是BufferedOutputStream,因此它调用OutputStream.write(byte [],int,int)。 这又使用for循环逐字节写入 请有人澄清实际发生的事情,以及它如何更快?

Java:Hibernate没有看到DataBase的变化

我有两个不同的应用程序共享相同的数据库。 问题是当我有一个应用程序在数据库中更改某些内容时,另一个不会更新。 我试着创建一个session.flush()但它没有用。 唯一的方法是关闭整个会话并重新创建它,但当然,这需要太长时间。

当Hibernate刷新会话时,它如何判断会话中的哪些对象是脏的?

我对Hibernate的理解是,当从DB加载对象时,它们被添加到Session中。 在不同的点上,根据您的配置,会话被刷新。 此时,修改后的对象将写入数据库。 Hibernate如何确定哪些对象“脏”并且需要编写? Hibernate生成的代理是否拦截了对字段的赋值,并将对象添加到Session中的脏列表中? 或者Hibernate是否查看Session中的每个对象并将其与对象的原始状态进行比较? 还是完全不同的东西?

在使用FlushMode.AUTO调用session.close()时,Hibernate会刷新我更新的持久对象吗?

如果设置了FlushMode.AUTO,当我调用session.close()时,Hibernate会刷新我更新的持久对象吗? 我知道session.close()通常不会刷新会话但我不确定FlushMode.AUTO如何影响这个。 来自Docs: FlushMode.AUTO 会话有时在查询执行之前刷新,以确保查询永远不会返回失效状态。 这是默认的刷新模式。 这是否意味着我可以依赖Hibernate来validation我的更改有时会在我的会话关闭之前刷新? 小代码示例: Session session = HibernateSessionFactory.getSession(); PersistedObject p = session.get(PersistedObject.class,id); p.setSomeProperty(newValue); session.close(); UPDATE 根据文档,这些是会话将刷新的地方(使用AUTO时) 在一些查询执行之前 来自org.hibernate.Transaction.commit() 来自Session.flush() 这没有说明Session.close()

在java.io.FileWriter中刷新

我有一个问题,在写入文件时,在关闭之前,我们应该包括flush()?? 如果是这样它会做什么呢? 不流自动冲洗? 编辑: 那么冲洗它实际上做了什么?