小编jas*_*mar的帖子

使用带有Maps键集的流时出现ConcurrentModificationException

我想删除someMap不存在密钥的所有项目someList.看看我的代码:

someMap.keySet().stream().filter(v -> !someList.contains(v)).forEach(someMap::remove);
Run Code Online (Sandbox Code Playgroud)

我收到了java.util.ConcurrentModificationException.为什么?流不是平行的.这样做最优雅的方法是什么?

java foreach lambda hashmap java-stream

19
推荐指数
4
解决办法
1万
查看次数

为什么这段代码比同等的C++/Clang生成更多的程序集?

我写了一个简单的C++函数来检查编译器优化:

bool f1(bool a, bool b) {
    return !a || (a && b);
}
Run Code Online (Sandbox Code Playgroud)

之后我检查了Rust中的等价物:

fn f1(a: bool, b: bool) -> bool {
    !a || (a && b)
}
Run Code Online (Sandbox Code Playgroud)

我用godbolt检查汇编器输出.

C++代码的结果(由clang -O3标志编译)如下:

f1(bool, bool):                                # @f1(bool, bool)
    xor     dil, 1
    or      dil, sil
    mov     eax, edi
    ret
Run Code Online (Sandbox Code Playgroud)

Rust等效的结果要长得多:

example::f1:
  push rbp
  mov rbp, rsp
  mov al, sil
  mov cl, dil
  mov dl, cl
  xor dl, -1
  test dl, 1
  mov byte ptr [rbp - 3], al
  mov byte …
Run Code Online (Sandbox Code Playgroud)

optimization rust llvm-codegen

15
推荐指数
2
解决办法
2145
查看次数

QTouchEvent而不是Linux上的QMouseEvent

我试图在Qt 5.9中从M3触摸屏处理QTouchEvent.我使用Qt Finger Print示例,它在Windows 7上工作正常但在Ubuntu 16.04上我收到鼠标事件而不是触摸事件.是Qt的错误或错误的操作系统配置?

什么更QTouchDevice::devices().size()总是等于0.

c++ linux qt touchscreen multiplatform

14
推荐指数
1
解决办法
440
查看次数

找到std :: map中给定前缀或std :: set中元素的键的优雅方法

我有地图,哪些键是std :: string.我想在地图中找到以"DUPA/"prefix 开头的那些元素.找到下限很容易,但上限有点问题.我写了这样一段代码:

const char* prefix = "DUPA/";
const char* firstAfterPrefix = "DUPA0";
auto prefixedBeginIt = myMap.upper_bound(prefix);
auto prefixedEndIt = myMap.lower_bound(firstAfterPrefix);
Run Code Online (Sandbox Code Playgroud)

代码工作正常,但我不认为它是优雅的,因为必须知道它0/在ASCII表中的第一个.第二种方法是复制前缀和增加最后一个符号.你知道更优雅的解决方案吗?

c++ stdmap prefix stdset

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

解组非根元素时的JAXB模式验证

使用JAXB解组整个XML时,可以设置XML模式以在解析期间启用验证:

//javax.xml.validation.Schema schema = ...
jaxbUnmarshaller = JAXBContext.newInstance(SomeRootType.class).createUnmarshaller();
jaxbUnmarshaller.setSchema(schema);
Run Code Online (Sandbox Code Playgroud)

另一方面,当您NestedObjest从XML 解组s 列表时,逐个(例如,减少内存使用)此方法失败(因为Schema只接受root),但有异常:

org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 22; cvc-elt.1: Cannot find the declaration of element 'NestedObject'
Run Code Online (Sandbox Code Playgroud)

即使NestedObjectType在XSD中定义良好,它也会失败.是否有任何选项可以启用嵌套对象验证?请注意,定义新架构是一个悲惨的选择,因为XSD是我的应用程序外部维护的其他人.

java xml xsd jaxb

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

颜色配置文件在图形程序中的作用

我想我明白什么颜色配置文件.我不明白,操纵照片有什么不同,例如在photoshop中16bpp sRGB16bpp Adobe RGB.我的显示器只能显示sRGB.

  • 算法有什么不同吗?
  • 也许在程序显示我的工作效果之前执行了一些预处理(例如AdobeRGB(0.3, 0.25, 0.82)显示sRGB(0.301, 0.253, 0.819)在我的显示器中)?
  • 当我不使用我的显示器/打印机的ICC配置文件时,使用不同的颜色配置文件是否有任何意义?
  • 一般情况下 - 如果我想开发自己的图形操作应用程序,支持不同于sRGB的配置文件(例如在Qt中),我该怎么办?

photoshop graphics image-processing gimp color-profile

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

Jackson 自定义 JsonSerializer - 有条件地调用默认序列化器

我想要的是有条件地为类的对象使用默认的 BeanSerializer:

class MyCustomSerializer extends StdSerializer<AbstractEntity> {

    public MyCustomSerializer() {
        super(AbstractEntity.class);
    }

    @Override
    public void serialize(AbstractEntity o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (someCondition()) {
           serializeNormalWay(); //how?
        } else {
           //custom serialization
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过做类似的事情:

serializerProvider.defaultSerializeValue(o, jsonGenerator);
Run Code Online (Sandbox Code Playgroud)

但这调用了 MyCustomSerializer 的方法,并且我有永无休止的递归。如何获得可用于普通 bean 序列化的适当 Serializer 对象?

java serialization json jackson fasterxml

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

jersey ResponseBuilder 文件名编码

在 javax.ws.rs.core.Response.ResponseBuilder 中,当我使用波兰语(德语、法语等)国家字符设置文件名时,它会在将响应发送到客户端之前更改文件名:

\n\n
ResponseBuilder response = Response.ok(file);\nresponse.header("Content-Disposition", "attachment; filename=\xc5\xbc\xc3\xb3\xc5\x82ty.txt");\n
Run Code Online (Sandbox Code Playgroud)\n\n

此后,文件将被下载为“-\xc3\xb3Bty.txt”。如何解决这个问题?

\n\n

编辑:\n整个应用程序可以使用 UTF-8 正常工作(例如,json 内容包含波兰语字符)。只有 http headers 没有。

\n

java jersey character-encoding jakarta-ee

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

为什么C++自定义分配器需要比较运算符?

在实现自定义C++分配器时,需要定义:

  • operator== 对于具有不同的分配器 value_type
  • operator!= 对于具有不同的分配器 value_type

您可以在Allocator概念文档中看到自定义分配器的示例实现:

#include <cstdlib>
#include <new>
template <class T>
struct Mallocator {
  typedef T value_type;
  Mallocator() = default;
  template <class U> constexpr Mallocator(const Mallocator<U>&) noexcept {}
  T* allocate(std::size_t n) {
    if(n > std::size_t(-1) / sizeof(T)) throw std::bad_alloc();
    if(auto p = static_cast<T*>(std::malloc(n*sizeof(T)))) return p;
    throw std::bad_alloc();
  }
  void deallocate(T* p, std::size_t) noexcept { std::free(p); }
};
template <class T, class U>
bool operator==(const Mallocator<T>&, const Mallocator<U>&) { return true; }
template <class T, …
Run Code Online (Sandbox Code Playgroud)

c++ allocator c++-standard-library

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

我可以专门研究前向声明的模板吗?

我可以专门研究前向声明的模板吗?例如:

template <typename T> class A;

template <>
class A<char> {
    char a[1000];
};

int main()
{
    [[maybe_unused]] A<char> a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想达到什么目标?

正如我们所知,我们必须专门std::hash将它与一些基于哈希表的类型一起使用。标准特化std::hash需要<functional>在头文件中包含然后特化它。我在很多地方都用到了这个头文件,编译时间<functional>挺大的。所以我想将我的专业转移到源(cpp)文件。

my_type.hpp:

class my_type {/*...*/};

namespace std {

template <typename T>
struct hash;

template <>
struct hash<my_type>
{
    size_t operator()(my_type m) const;
};
} // namespace std
Run Code Online (Sandbox Code Playgroud)

my_type.cpp:

#include "my_type.hpp"
#include <functional>
namespace std {
size_t std::hash<my_type>::operator()(my_type v) const
{
    return std::hash<decltype(v.value())>{}(v.value());
}
} // namespace std
Run Code Online (Sandbox Code Playgroud)

此解决方案有效,但就 …

c++ templates template-meta-programming

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

防止 boost::asio::io_context 在空轮询调用时停止

此代码调用发布的句柄

    boost::asio::io_context ioc;
    boost::asio::post(ioc, []{ std::cout << "lol" << std::endl; });
    ioc.poll();
Run Code Online (Sandbox Code Playgroud)

而这并没有:

    boost::asio::io_context ioc;
    ioc.poll(); // empty, set internal state to stopped_
    boost::asio::post(ioc, []{ std::cout << "lol" << std::endl; });
    ioc.poll(); // doesn't work as stopped() now returns true
Run Code Online (Sandbox Code Playgroud)

实例

是设计使然吗?如果是,为什么?我可以io_context通过某种方式配置来改变这种行为吗?

c++ boost boost-asio

4
推荐指数
1
解决办法
4008
查看次数

Android BitmapFactory.decodeResource需要太多内存

我有关于从资源加载Bitmap的问题.我的代码:

public void onClick(View view) {
    if (mainButton == view) {
        Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.test);
    }
}
Run Code Online (Sandbox Code Playgroud)

test.jpg图像分辨率为3288 x 4936px.它是jpeg(未压缩时为3,9MB/48,7MB).虽然此功能有效(在我的Nexus 7 2013设备上),但会发生以下异常:

java.lang.OutOfMemoryError: Failed to allocate a 259673100 byte allocation with 5222644 free bytes and 184MB until OOM
        at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
        at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
        at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
        at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:467)
        at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:497)
        at pl.jaskol.androidtest.MainActivity.onClick(MainActivity.java:50)
        at android.view.View.performClick(View.java:4756)
        at android.view.View$PerformClick.run(View.java:19749)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Run Code Online (Sandbox Code Playgroud)

为什么应用程序尝试分配多达248MB?我在Qt for Android中编写了类似的应用程序,在资源中使用相同的图像并且工作正常.

编辑: …

java memory android image bitmap

3
推荐指数
1
解决办法
6561
查看次数