- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
整个代码比较复杂,直接进入正题。代码如下
SSLContext ctx = SSLContext.getInstance("TLS");
如果您阅读 docs对于它说的 getInstance(String protocol) 方法
This method traverses the list of registered security Providers, starting
with the most preferred Provider. A new SSLContext object encapsulating
the SSLContextSpi implementation from the first Provider that supports the
specified protocol is returned.
Note that the list of registered providers may be retrieved via the
Security.getProviders() method.
对我来说,Security.getProviders() 方法提供以下提供者
现在我已验证“TLS”协议(protocol)在 com.sun.net.ssl.internal.ssl.Provider
(索引 2)中并且始终处于选中状态。
但相应的 SSLContextSpi 对象在 Java 6 和 Java 7 中有所不同。在 java 6 中,我得到 com.sun.net.ssl.internal.ssl.SSLContextImpl@7bbf68a9
而在 java 7 中我收到 sun.security.ssl.SSLContextImpl$TLS10Context@615ece16
。这会产生非常糟糕的效果,因为稍后我创建 SSL 套接字时它们属于不同的类。
那么为什么会这样呢?有解决办法吗?我想要相同的 com.sun.net.ssl.internal.ssl.SSLContextImpl@7bbf68a9
SSLContextSpi 对象封装在 com.sun.net.ssl.internal.ssl.Provider
上下文(在两种情况下都相同)。
最佳答案
This is having very bad effect as when later I am creating SSL socket they are of different class.
这不是一个坏的效果。您从公共(public) API 中的工厂获得哪个实际类由 JRE 实现自行决定:这些具体类不是公共(public) API 的一部分。
在 Java 6 和 Java 7 之间获得不同的类这一事实并不重要。即使它们具有相同的名称,将它们相互比较也没有意义。
编辑:
Java 7 中的
public int read(byte[] b)
function reads only 1 bytes when I give it a byte array of length 4 and also i have confirmed that there are 4 bytes in the stream.
SSLSocket
在您获取此信息时行为正确。事实上,它可能表现得更好,因为这个初始的 1 字节读取是由于 BEAST-prevention measure 引起的。 .我将复制并粘贴我自己对该问题的回答,因为您犯了完全相同的错误。
假设您在读取 byte[]
时与您在另一端写入的完全相同,这是一个典型的 TCP 错误。它实际上并不特定于 SSL/TLS,但也可能发生在 TCP 连接上。
在 TCP(和 SSL/TLS)中不能保证读取器的缓冲区将填充与写入器缓冲区中的数据包完全相同的数据包长度。所有 TCP 保证都是按顺序交付,因此您最终会获得所有数据,但您必须将其视为流。
这就是为什么使用 TCP 的协议(protocol)依赖于指示符和定界符来告诉另一端何时停止读取某些消息。
例如,HTTP 1.1 使用空行指示 header 何时结束,并使用 Content-Lengt
h header 告诉接收者期望的实体长度(或分块传输编码) . SMTP 还在邮件末尾使用换行和 .
。
如果您正在设计自己的协议(protocol),则需要定义一种方式让接收者知道您定义的有意义的数据单元何时被分隔。当您读取数据时,读取此类指示符并填充您的读取缓冲区,直到您获得预期的字节数或找到您定义的分隔符。
关于java - SSLContext.getInstance() 方法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18852337/
我正在按照本教程创建 Singleton,所有者在以下方法时有评论 http://www.journaldev.com/1377/java-singleton-design-pattern-best-
package com.example.vivanksharma.firebase; import android.support.v7.app.AppCompatActivity; import a
自从首次引入它来替换 Date 以来,我一直在使用静态方法 Calendar.getInstance() 来获取新的 Calendar目的。我从来没有遇到过问题,但出于某种原因我只是想知道使用 Gre
我正在使用适用于 Windows 8 的 MVVM Light 第 4 版;它包括 SimpleIOC。在各种示例中,我有时会看到基于 SimpleIoc 请求对象的代码......有时它基于 Ser
我看过这个post关于注册泛型类型。 如何注册的示例: bind(new TypeLiteral>() {}).to((Class>) ResponseDal.class); 但是如何从注入(inj
我想在我的 unitTest 中从 Guice injector 注入(inject)一个实例。 我可以使用哪个微分器? 我知道构造函数参数中使用了@annotation机制 但是 junit 不允许
我正在使用静态实例对象来获取与应用程序中另一个 Activity 相关的数据。但这会导致内存泄漏。 public class ChartActivity extends AppCompatActivi
以前用过C#,我考虑过 Calendar cal = Calendar.getInstance(); 根据 GoF 成为单例方法 Singleton pattern (Wikipedia)我想知道如何
我很难找到以对性能最友好的方式使用单例类的正确方法。我有 3 种方法,也许有人可以向我解释最有效的方法: 1: public functionA() { SingletonClassA.get
最近我阅读了一些使用广泛遵循 getInstance() 方法的 C++ 代码: class S { private: int some_int = 0; public
许多公开可用的 Java API 似乎都使用 getInstance 来生成和返回对象。我很好奇为什么会这样——为什么不直接使用默认/参数化构造函数呢? 是否有关联的设计模式? 最佳答案 我建议阅读
我遇到过单例模式。我无法理解 singletonobj.getinstance().dosomething() //1st one 和 singletonobj.dosomething() //2nd
getInstance() 在 Java 中的作用是什么? 在我的研究过程中,我一直在读到 getInstance() 有助于实现单例设计模式(据我了解,这意味着整个程序中只有一个实例)。但是我不能只
Firebase Firestore 提供 getInstance()方法,它打开一个套接字(在应用程序执行的任何时候只有一个)并实例化 Firestore 客户端。 我想查询和存储数据,使用或不使用
我正在将一个表单组件放入 joomla.In 中,我将在其中放置一个文本框、一个编辑器和一个按钮。 我为此表单创建了 View 文件,并且组件已成功安装。但是当我单击以在前端显示此表单时,会出现如下错
我正在尝试跟踪人们是否从广告或其他地方找到了我的 Android 应用。所以我发现谷歌分析可以通过这个表单生成的精心构建的 url 来跟踪它: http://code.google.com/mobil
我观看了此视频(https://www.youtube.com/watch?v=idb6hOxlyb8),该视频是2013年8月上传的。它声称我们应该使用 ptor.get(url) 而不是 brow
创建 google-service.json 后运行示例时,应用在尝试在 SignInActivity 中获取数据库引用时崩溃 mDatabase = FirebaseDatabase.getInst
基于以下问题:Decimal point or decimal comma in Android我尝试获取设备中使用的小数点分隔符。我正在使用Kotlin,因此我的代码如下所示: import and
从 Fabric Crashlytics 迁移到 FirebaseCrashlytics SDK 后,我在另一个进程(不是主进程)上遇到了一些崩溃。 当在 Activity 中调用 FirebaseC
我是一名优秀的程序员,十分优秀!