Tag: 缓冲区

用Java清除数据报缓冲区

所以我从互联网上获得了这个简单的udp客户端/服务器代码,它可以工作。 但是,当我输入比我之前输入的东西短的东西时,我会剩下剩下的字符。 例如,如果我先输入: kitty 然后输入: cat 第二个印刷品如下: catty 我一直在寻找其他有类似问题的人,他们中的大多数似乎都是通过清除字节数组来解决的。 但是,如果我尝试实现他们的答案,它不能解决我的问题。 我需要做什么,并且(可能更重要的是)代码应该去哪里? 这是代码: 客户: import java.io.*; import java.net.*; class UDPClient { public static void main(String args[]) throws Exception { BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientSocket = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName(“localhost”); byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; String sentence […]

是否存在缓冲的ObjectInputStream?

我从一个350KB大小的文件反序列化一个对象,并花了相当长的时间。 我的计算机科学TA告诉我,有一种方法可以使用Buffered阅读器和ObjectInputStream来大大提高性能。 但是我在谷歌上找不到任何相关信息。

使用copyPixelsToBuffer时Android如何应用alpha通道?

相关主题(尚未提供解决方案): 访问ARGB_8888 Android Bitmap中的原始数据 简而言之:当使用copyPixelFromBuffer和copyPixelsToBuffer ,Android已经在RGB通道上应用了Alpha通道。 我需要将其转换为原始的ARGB值,反之亦然。 我不知道Android如何应用它。 你能告诉我配方吗?

最后填充空字节的字节数组:如何有效地复制到较小的字节数组

有: [46][111][36][11][101][55][87][30][122][75][66][32][49][55][67][77][88][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0] 想: [46][111][36][11][101][55][87][30][122][75][66][32][49][55][67][77][88] 我有一个字节大小为8192的数组,从第一个数组中的某个索引开始,直到数组的结尾,字节都是空字节。 因此,数组末尾可能有6000个字节的值和2196个空字节。 如何有效地创建一个大小的新数组(6000)并复制这些字节? 注意:我不知道有多少空字节或带有值的字节。

Java为高并发情况限制了非阻塞缓冲区

基本上我需要一个数据结构来存储服务器端的临时聊天消息。 它应该是: 有界:因为我不需要存储太多消息,客户端将每秒发送请求以获取新消息。 我认为绑定的大小应该是最大值。 在一秒钟内挂载并发请求。 当缓冲区已满时,将删除旧消息。 适合高并发访问:我不想使用像Collections.synchronizedXXXX这样的数据结构,因为在迭代期间,如果其他线程更改了数据结构,例如添加了一条消息,它将抛出exception,所以我必须锁定整个数据结构,实际上我并不关心客户端请求是否可以获得最后插入的消息,因为它们将在一秒后发送新请求,另一方面写操作应该永远不会延迟。 包java.util.concurrency下的类似乎是解决方案,但是…… 非阻塞:LinkedBlockingQueue,ArrayBlockingQueue它们可以是有界的,并且在迭代期间不会抛出exception,但它们都是阻塞队列。 当队列已满时,我想将新元素添加到尾部并从头部删除旧元素而不是阻塞它,并等待某人删除标题。 所以我的问题是第三个库有什么好的实现吗? 比如谷歌番石榴? 或者您可能更了解在服务器上存储临时聊天消息? 非常感谢你!

奇怪的BufferStrategy问题 – 游戏仅在英特尔GPU上运行速度很快

我遇到了一个非常奇怪的问题,我试着寻找几天和几天的答案。 我的游戏刚刚获得了一个新的粒子系统,但速度太慢而无法播放。 不幸的是,BufferedImage转换非常慢。 爆炸效果包括从.png文件加载的大约200个白色精灵,随机旋转,缩放和着色,以随机速度移动。 我试图通过三重/双重缓冲使性能更好,并遇到了一些问题。 我的第一次尝试是使用JPanel进行游戏。 我在JFrame的类(Main)中设置缓冲区,然后在Game(扩展JPanel)类中完成绘图,但没有Graphics g = bufferstrategy.getDrawGraphics();. 然后,在绘图方法结束时,我显示缓冲区IF没有丢失。 缓冲区总是“丢失”,因为我没有使用它的Graphics对象进行绘图。 但! 游戏运行得和地狱一样快! 在实际使用中没有缓冲! 但是怎么样? 此尝试最终没有出现图形错误,并且具有巨大的性能提升 – 但仅限于nVidia / AMD显卡。 英特尔GPU无法处理这个问题,屏幕闪烁白光。 所以,我最终设置并正确使用BufferStrategy。 Game类现在扩展Canvas,而不是JPanel,因为从JFrame获取Graphics,并且使用它在JPanel上绘制最终会在偏移量中,因为它在标题栏下绘制。 仍然很快,修复60 FPS。 现在,当我在JFrame(Main类)中创建BufferStrategy时,根本没有图片。 我通过在Game类(Canvas)中设置BufferStrategy来纠正这个问题。 图片现在是正确的,但游戏本身就像蜗牛一样慢。 一次爆炸使FPS下降至~10,但仅限于nVidia / AMD。 具有讽刺意味的。 即使是老式的英特尔GPU也能以60 FPS处理它,我还是在一台具有5到6年历史的集成英特尔GPU上以60 FPS的速度运行了10000个粒子。 发生爆炸时,我的卡会碰到高达100%的负载。 这是我的主要代码(整个代码不清楚且很长): public class Game extends Canvas { -snip- public void tick() { BufferStrategy bf = getBufferStrategy(); Graphics g […]

CharBuffer与char

有没有理由更喜欢CharBuffer到char[] ,如下所示: CharBuffer buf = CharBuffer.allocate(DEFAULT_BUFFER_SIZE); while( in.read(buf) >= 0 ) { out.append( buf.flip() ); buf.clear(); } 与 char[] buf = new char[DEFAULT_BUFFER_SIZE]; int n; while( (n = in.read(buf)) >= 0 ) { out.write( buf, 0, n ); } (在哪里Reader和Writer )?

Java中可用的最佳可resize的循环字节缓冲区是什么?

我需要Java中的字节缓冲类来实现单线程使用。 我应该能够在缓冲区的后面插入数据并在前面读取数据,摊销成本为O(1)。 缓冲区应该在它满时resize,而不是抛出exception或其他东西。 我可以自己编写一个,但如果在标准Java包中不存在,我会感到非常惊讶,如果没有,我希望它存在于一些经过良好测试的公共库中。 你会推荐什么?

File Writer会覆盖以前的Java

try { File file = new File(filePath+”usedcommands.txt”); if (!file.exists()) { file.createNewFile(); } FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); bw.write(input+”\n”); bw.close(); } catch(Exception e) { System.out.println(“can’t write to usedcommands.txt…”); } 我正在写一个txt文件,但每次我执行写入过程时它都会覆盖已经写入的内容。 如何更改我的代码,以便程序的这一部分不会覆盖已有的代码?

Java:FloatBuffer到OpenGL – wrap()与allocate()对比BufferUtils.createBuffer()

数据源: float[] v = { … }; 工作范例: FloatBuffer buf = BufferUtils.createFloatBuffer(v.length); buf.put(v); buf.flip(); // or buf.rewind() 缓冲区现在可以上传到opengl并正常工作: … glBufferData(…, buf, …); … 为什么以下缓冲区创建示例也不起作用? 不工作1: FloatBuffer buf = FloatBuffer.wrap(v); 不工作2: FloatBuffer buf = FloatBuffer.allocate(v.length); buf.put(v); buf.flip(); // or buf.rewind() 编辑: 浏览API代码后,我发现: 在工作示例的情况下,memAddress(buf)返回一个有效的地址,但在其他情况下它只返回0。 其他信息: 为什么我得到一个FloatBuffer不是直接错误?