小编Dan*_*iel的帖子

为模式匹配创建运算符类,如text_pattern_ops

我创建了一个使用自然排序("1" <"2" <"10" <"11"等),用我的新运营商的文本数据类型我自己比较运营商#<#,#<=#,#>##>=#.

现在我将它们放入一个运算符类中,以便能够在它们上创建索引,如下所示:

CREATE OPERATOR CLASS text_natsort_ops
   FOR TYPE text USING btree AS
   OPERATOR 1  #<#,
   OPERATOR 2  #<=#,
   OPERATOR 3  =,
   OPERATOR 4  #>=#,
   OPERATOR 5  #>#,
   FUNCTION 1  bttext_natsort_cmp(text, text);
Run Code Online (Sandbox Code Playgroud)

然而,当我创建一个使用我的新的指数text_natsort_ops,在此不涉及查询中使用like,因为它的时所做的text_pattern_ops使用.

如何声明我的运算符类以允许like使用我的索引?

更新:

以上似乎有效,所以问题无效.我真正的问题是我使用了如下查询:

select *
  from mytable
 where number like 'edi%'
 order by number using #<#
 limit 10
Run Code Online (Sandbox Code Playgroud)

我还有另一个使用text_pattern_ops的索引,这是由计划者选择的,因为它似乎工作得更快.但是,由于order by ... using只使用我的新操作的索引将是有用的...另一个索引返回太多结果,我需要限制子句可用于索引扫描.

postgresql

9
推荐指数
1
解决办法
735
查看次数

Java上的对象头大小,64位VM,内存小于4GB

我想知道是否有一些方法让64位VM使用8byte对象头而不是12byte对象头,如果JVM的可用RAM仍然是4GB.

或者就像在Linux上那样,如果没有在Windows上?有人可以用这段代码测试吗?

import java.lang.reflect.Field;
import sun.misc.Unsafe;
public class ObjectSizes {
    String s1;
    String s2;
    public static void main(String[] args) throws Exception {
        Unsafe unsafe;
        try {
            Field field = Unsafe.class.getDeclaredField("theUnsafe");
            field.setAccessible(true);
            unsafe = (Unsafe)field.get(null);
        } catch (Exception ex) {
            throw new RuntimeException("Can't get Unsafe instance.", ex);
        }
        Field s1Field = ObjectSizes.class.getDeclaredField("s1");
        Field s2Field = ObjectSizes.class.getDeclaredField("s2");
        long s1OffSet = unsafe.objectFieldOffset(s1Field);
        long s2OffSet = unsafe.objectFieldOffset(s2Field);
        System.out.println("We are running "+System.getProperty("java.version"));
        System.out.println("Object header size is "+s1OffSet+" bytes.");
        System.out.println("Object reference size is "+(s2OffSet-s1OffSet)+" bytes.");
    } …
Run Code Online (Sandbox Code Playgroud)

java linux windows 64-bit

9
推荐指数
1
解决办法
3584
查看次数

Java中的扩展打印机信息

我正在尝试获取有关系统上打印机的一些信息.
在Windows和Linux上,使用此代码,仅PrinterName填充属性:

PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null,null);
for( PrintService printService : printServices ) {
    log.info("Found print service: "+printService);
    log.info(printService.getAttribute(PrinterName.class));
    log.info(printService.getAttribute(PrinterLocation.class));
    log.info(printService.getAttribute(PrinterMakeAndModel.class));
    log.info(printService.getAttribute(PrinterMessageFromOperator.class));
    log.info(printService.getAttribute(PrinterMoreInfo.class));
    log.info(printService.getAttribute(PrinterMoreInfoManufacturer.class));
    log.info(printService.getAttribute(PrinterState.class));
    log.info(printService.getAttribute(PrinterStateReasons.class));
    log.info(printService.getAttribute(PrinterURI.class));
}
Run Code Online (Sandbox Code Playgroud)

使用toArray()它后的功能......

log.info("Found print service: "+printService);
for( Attribute a : printService.getAttributes().toArray() ) {
    log.info("* "+a.getName()+": "+a);
}
Run Code Online (Sandbox Code Playgroud)

......这是结果:

Found print service: Win32 Printer : Brother MFC-9420CN BR-Script3
* color-supported: supported
* printer-name: Brother MFC-9420CN BR-Script3
* printer-is-accepting-jobs: accepting-jobs
* queued-job-count: 0

如何获取更多信息,例如打印机评论?

java printing

8
推荐指数
1
解决办法
9806
查看次数

在Java中快速实现端口转发

我构建了一个打开ServerSocket的简单应用程序,在连接时,它将自身连接到远程计算机上的另一个服务器套接字.为了实现端口转发,我使用两个线程,一个从本地输入流读取并流到远程套接字输出流,反之亦然.

实现感觉有点无法实现,所以我问你是否知道更好的实现策略,或者甚至有一些代码可以以高效的方式实现.

PS:我知道我可以在Linux上使用IPTables,但这必须在Windows上运行.

PPS:如果你发布这个简单任务的实现,我将创建一个基准来测试所有给定的实现.对于许多小型(~100字节)包和稳定数据流,解决方案应该是快速的.

我当前的实现是这样的(在每个方向的两个线程中执行):

public static void route(InputStream inputStream, OutputStream outputStream) throws IOException {
    byte[] buffer = new byte[65536];
    while( true ) {
        // Read one byte to block
        int b = inputStream.read();
        if( b == - 1 ) {
            log.info("No data available anymore. Closing stream.");
            inputStream.close();
            outputStream.close();
            return;
        }
        buffer[0] = (byte)b;
        // Read remaining available bytes
        b = inputStream.read(buffer, 1, Math.min(inputStream.available(), 65535));
        if( b == - 1 ) {
            log.info("No data available anymore. Closing stream.");
            inputStream.close();
            outputStream.close(); …
Run Code Online (Sandbox Code Playgroud)

java portforwarding

7
推荐指数
2
解决办法
2万
查看次数

SWT - 如何更改TabFolder中现有TabItem的顺序

如何更改TabFolder中现有TabItem的顺序?很抱歉无法发布更多内容,但我完全没有任何线索.TabItems没有z-Index,所包含的合成的moveAbove()和moveBelow()不起作用,我有尝试一切的感觉.

问候,丹尼尔

java swt

7
推荐指数
1
解决办法
1221
查看次数

具有缓慢重绘内容的滚动复合看起来很难看

我正在为SWT实现甘特图组件,这需要重新绘制一下(例如,图表的整个可见部分为200毫秒).

现在,当我滚动时,我只重新绘制剪切矩形所需的内容.当我快速滚动时,这使得应用程序看起来非常糟糕,因为滚动后仍然可见的部分似乎首先被操作系统移动,并且当我完成绘制剩余部分(滚动期间变得可见的部分)时,立即显示新的滚动步骤开始,将我的图表的一半移到右边,让我重新绘制另一半.这实际上看起来像我的图表在滚动期间在中间闪烁.

这看起来不太好看.有办法解决这个问题吗?这个问题可以理解吗?

编辑:这是一个"小"测试程序,准确显示所描述的行为.您只需要在类路径中使用SWT来运行它.

package de.ikoffice.gui;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class SlowRepaintProblem {

    public Color[] colors = new Color[501];

    public SlowRepaintProblem() {
        Display display = Display.getDefault();
        for( int i=0; i<=500; i++ ) {
            int r = ( i * 10 ) % 256;
            int g = ( i * 20 ) % 256;
            int b = …
Run Code Online (Sandbox Code Playgroud)

java swt scroll repaint

7
推荐指数
1
解决办法
1934
查看次数

PostgreSQL - BEFORE触发器比AFTER触发器更有效吗?

我刚刚阅读了PostgreSQL文档 - 触发器行为概述,BEFORE触发器比AFTER触发器"更有效":

如果您没有特定的理由在之前或之后进行触发,则之前的情况更有效,因为有关操作的信息不必保存到语句结束之前.

我不明白这是真的还是对我来说意味着什么.有人可以开导我吗?这只是一种逆转性能改善吗?

postgresql performance triggers

6
推荐指数
1
解决办法
2944
查看次数

为整个测试套件添加日志记录侦听器

我正在使用JUnit4并在测试套件中组织我的所有测试,并使用@RunWith(Suite.class)注释进行注释.

现在我想向JUnit注册一个自定义记录器,因此在每次测试的每个开始和完成时都会打印一条日志消息.

我已经找到了RunNotifier和RunListener类,但不知道如何将我的TestSuite定义中的监听器添加到JUnit.

有任何想法吗?

logging junit

6
推荐指数
1
解决办法
2557
查看次数

如何使InputStreamReader在无效数据上失败以进行编码?

我有一些字节应该是UTF-8编码,但其中可能包含文本是ISO8859-1编码,如果用户以某种方式没有设法使用他的文本编辑器正确的方式.

我用InputStreamReader读取文件:

InputStreamReader reader = new InputStreamReader( 
    new FileInputStream(file), Charset.forName("UTF-8"));
Run Code Online (Sandbox Code Playgroud)

但是每次用户使用像ä"这样的变音符号时,如果存储在ISO8859-1中是无效的UTF-8,则InputStreamReader不会抱怨但会添加占位符字符.

是否有简单的方法使这个无效输入抛出异常?

java encoding inputstreamreader

6
推荐指数
1
解决办法
966
查看次数

是否应该为桌面应用程序压缩jar文件?

只是想知道,如果压缩jar文件一般是一个好主意,这些文件将与桌面应用程序一起发送(没有网络访问jar),如果解压缩将比文件io具有更大的影响.

编辑:谢谢你到目前为止的答案,并抱歉在这里有点不清楚.我没有谈到将罐子运送给客户,而是在应用程序启动时将磁盘上的jar文件的最佳格式.我知道jar文件是zip文件,可以提供不同的压缩级别(或根本没有压缩),我直接想知道压缩如何改变启动性能,不仅仅是在我的开发盒上(其中有一个快速的SSD磁盘) ,但也在较慢的磁盘上).

java compression jar

5
推荐指数
1
解决办法
7202
查看次数