Tag: nio

是否需要FileChannel.force和FileDescriptor.sync?

在https://stackoverflow.com/questions/730521/really-force-file-sync-flush-in-java中 ,作者在答案摘要中写道: 对于Java NIO,使用c.force(true),然后使用s.getFD()。sync() 我的问题是:你真的需要两者吗? 力不够吗? 是不是强制和同步只是不同的接口做同样的事情? 我找不到任何确认的地方。

尝试同时读取时,Java滚动文件创建失败

我正在使用java.util日志记录类来创建滚动文件appender。 我想创建一个日志阅读器,当数据写入它们时从这些日志中读取。 滚动日志appender代码本身可以正常工作。 但是一旦我启动阅读器线程,就不会创建新文件,即如果将滚动日志appender设置为使用5个文件,它将创建1og.0,log.1,log.2等等但是如果阅读器线程启动则它将仅创建log.0没有创建其他文件。 我在java logging和log4j中都注意到了这一点。 我正在使用nio来读取日志阅读器。 所以我的疑问是,在同一个文件上创建另一个FileChannel会产生一些问题吗? 或者我错过了一些导致问题的基本nio内容。 这是代码.. public class Test { private static final long initialTime = System.currentTimeMillis(); private static Logger logger = Logger.getLogger(Test.class.getName()); public static void main(String[] args) { logger.setLevel(Level.INFO); try { BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream( new File(System.getProperty(“user.dir”)+File.separator+”input.dat”)))); FileHandler handler = new FileHandler(“log/test.log”, 1024, 5, true); […]

JAVA NIO Bytebuffer.allocateDirect()对int的大小限制

我正在尝试制作堆外内存缓冲区。 我想要非常大的(如10GB)缓冲区。 我听说jvm堆有时会冻结,因为完整的GC。 所以,我尝试使用java.nio.ByteBuffer创建缓冲区。 但是,我遇到了很大困难! java.nio.ByteBuffer.allocateDirect(int size) 函数只支持整数。 但我想要更大的尺寸。 我能做什么? 我该怎么办? 请帮我堆叠溢出大师。 我的开发环境是macbook pro,i7 2.4ghz,16gb ddr3,250ssd,osx 10.9,eclipse kepler x64。 我尝试解决问题: ByteBuffer buffer = ByteBuffer.allocateDirect(1024*1024*2000); ByteBuffer buffer1 = ByteBuffer.allocateDirect(1024*1024*2000); ByteBuffer buffer2 = ByteBuffer.allocateDirect(1024*1024*2000); ByteBuffer buffer3 = ByteBuffer.allocateDirect(1024*1024*2000); 但这不起作用。 仅重新分配内存1024 * 1024 * 2000 请帮帮我。

Java GCs开销:如果你有10mb或10g *引用的*对象,这有关系吗?

GC必须检查并找出可以收集的对象。 我的问题是,是否有太多要检查的对象会导致GC开销,或者某种程度上GC是否足够智能以避免必须遍历所有对象以找出哪个对象不再被引用?

Spring Integration – 可靠的TCP,适用于大批量应用

我正在使用Spring Integration for TCP服务器,它可以连接几千个客户端。 我需要服务器在负载过重的情况下限制客户端并且不丢失消息。 我的服务器配置: 由于连接工厂的默认任务执行程序是无限制的,因此我使用池化任务执行程序来防止内存不足错误。 一个简单的负载测试客户端: public class TCPClientTest { static Socket socket; static List sl = new ArrayList(); static DataOutputStream out; public static void main(String[] args) throws Exception { for (int i = 0; i < 10000; i++) { socket = new Socket("localhost", 60000); sl.add(socket); out = new DataOutputStream(socket.getOutputStream()); out.writeBytes("connection " + […]

java nio和stdin,stdout,stderr的流结束

我有一个程序A通过Pipe.SourceChannel接收ByteBuffer中另一个程序B的标准输出。 程序将从ByteBuffer中读取stdout,直到它到达流的末尾(即,直到ByteBuffer的read()返回-1)。 程序B的stdout可以在程序执行中多次打开和关闭吗? 也就是说,read()是否可能返回-1,但后来程序B有额外的stdout,在这种情况下,程序A应该执行另一个ByteBuffer的read()? 提前致谢。

FileChannel和RandomAccessFile似乎不起作用

简单来说:使用sqlitejdbc作为后端的swing应用程序。 目前,启动使用相同数据库文件的多个实例没有问题。 应该有。 该文件已被锁定(在应用程序运行时无法将其删除)因此检查应该是微不足道的。 事实certificate不是。 File f = new File(“/path/to/file/db.sqlite”); FileChannel channel = new RandomAccessFile(f, “rw”).getChannel(); System.out.println(channel.isOpen()); System.out.println(channel.tryLock()); 结果是 true sun.nio.ch.FileLockImpl[0:9223372036854775807 exclusive valid] 无论应用程序是否正在运行。 我错过了这一点吗? TIA。

Java NIO – 使用选择器

有一些关于使用非阻塞选择器的快速问题 – 回答下面的任何一个将不胜感激: 我刚刚学习了选择器(java NIO模型),并希望澄清一些事实。 从教程和SO问题中挑选了大部分关键点: Java NIO:选择器 所以: 从上面链接的问题中,注册服务器套接字通道以监听接受,当接受通道注册读取时,一旦读取它就注册为写入。 然后如何重新听取接受? 我的意思是似乎没有重复调用寄存器接受监听器。 只是一旦注册了ServerSocketChannel,选择器将始终监听接受吗? 如果是这样,这是否意味着选择器将始终监听通道上的读/写? 你如何阻止它 – 它是否像关闭频道一样简单? 如果频道注册两次会怎样? 我的意思是 – 在上面的例子中,每次读取一条消息后都会注册一个套接字 – 基本上看起来像一个echo服务器。 我想这个例子假设在写完后连接将被关闭。 如果你想保持一个开放的连接并以不同的间隔写入套接字会发生什么 – 你必须每次都注册一个interestOp吗? 两次注册同一频道是否有害? multithreading:现在编写multithreading服务器的最佳设计是什么 – 因为上面的非阻塞方法假定一个线程可以处理写入和读取。 如果预期读/写操作需要一段时间,您是否应该创建新线程? 还有其他要考虑的问题吗? 了解multithreading是用于阻止IO但是已经看到一些使用线程池和非阻塞模型的框架,并且想知道为什么。

Java NIO – 非阻塞通道与AsynchronousChannels

Java NIO提供SocketChannel和ServerSocketChannel ,可以设置为非阻塞模式(异步)。 大多数操作返回与成功相对应的值或者尚未执行操作。 除了回调function之外, AynchronousSocketChannel和AsynchronousServerSocketChannel的目的是什么?

Java NIO read()End Of Stream

我正在使用Java NIO来接受,读取和写入我的服务器。 在文档中,它说SocketChannel.read()函数将返回从套接字读取的字节数,如果它到达流的末尾则返回-1。 现在 – 我真的不明白”End Of Stream”是什么意思? 它和borken pipe错误一样吗? 这是否意味着双方都失去了连接,我应该关闭SocketChannel? 如果有人可以解释更多关于它的话,我会非常满意 – 并根据它给出一些正确使用和行为的例子。