Java 9在9月21日正式发布,同时Oracle宣布将Java新版本的发布周期调整为每半年一次。目前,Java新版本的开发也已正式进入轨道。就已公开的消息来看,下一个版本的Java预计会在2018年3月发布,版本号将会是18.3,已经规划加入的特性包括JEP 286和296。
根据reddit站点上的讨论,首先更新的是JEP 296,Valhalla预计很快也会加入进来。OpenJDK的主页面则显示,已确定要在18.3版本实现的是JEP 286和296。
JEP 296主要是将JDK仓库群(JDK Repository Forest)合并为一个仓库,旨在降低管理大量仓库群的成本。根据InfoQ之前的报道,该仓库群的合并已经完成。这些软件仓库是在OpenJDK发展史上历次分裂生成的,在OpenJDK 9及以前的版本中将会继续存在。在这次合并操作之前,OpenJDK曾分裂为多个不同的Mercurial软件仓库群,这导致了许多问题,例如不能以原子方式对多个软件仓库应用漏洞修复(Bug Fixes)。在OpenJDK合并完成后,只会有一个软件仓库,并复制在三个开发线上。为了简化仓库的管理,JDK中还创建了用于在合并和未合并版本间移动更改的工具。
JEP 286提议在Java中引入局部变量的类型推断,该JEP在2016年提出,InfoQ曾经报道过该JEP的概况和相关的开发者调查结果。该JEP旨在减少编写Java代码相关的仪式性的内容,提升开发人员的体验,同时还要保证Java语言的静态性。它会减少开发人员在声明局部变量时,没有必要的变量类型声明。如果该JEP实现的话,在声明局部变量的时候,就可以采用类似如下的方式:
var list = new ArrayList(); // infers ArrayList var stream = list.stream(); // infers Stream
这种语句只能用于带有初始化器(initializer)的局部变量、增强的for-loop中的索引以及传统for-loop中声明的局部变量。它不能用于方法声明、构造函数声明、方法返回值、字段、catch语句以及其他类型的变量声明中。
关于局部变量的类型推断,不管是JVM体系中的语言还是其他语言都提供了一定形式的支持,比如C++(auto)、C#(var)、Scala(var/val)以及Go(通过:=进行声明)。至于该使用var作为关键字,还是使用let或类似于C/C++中的auto作为关键字,之前曾经有过一个面向开发者的调查。大约84%的回答表明定义可变内容的变量用关键字var是恰当的,只有百分之几的回答者建议使用auto更合适。根据Java语言架构师Brian Goetz介绍,该功能应该使用关键词var。
关于该特性的用法,在reddit上有一些讨论。有人表示,即便在支持“auto”语法的语言中,该特性使用的也比较少,因为有些人希望一眼就能看出变量的类型是什么。也有人认为,var有它的适用空间,在小的代码块中,直接用它实例化对象是可以的。如果是作为方法返回值的话,还是希望明确声明类型,Java的类型推断并不支持方法返回值,这一点倒不必担心。如果函数或代码块比较长的话,就不建议使用var了并要考虑适时进行代码的重写。时间和经验将会让我们更加明确应该在何时使用新功能,就像Optional刚出现时,也是耗费了一些时间才明确其推荐适用场景。
Valhalla项目中包含了一些有趣的JEP,包括值类型(Value Type)、针对原始类型实现泛型功能、增强的volatile等,外界很期待这些内容最终也能添加到新版本中。
2017慧都十四周年狂欢搞事情!砸金蛋100%抽现金红包、满额豪送iPhone X、iPhone 8、DevExpress汉化免费送、团队升级培训套包劲省10万元......更多惊喜等您来探索!

应用于Web应用程序的TWAIN扫描识别工具 支持所有主流浏览器。 | |
更快速、更安全的远程获取 和跨平台VSS插件 兼容所有的网络技术,平台和设备 | 为桌面应用程序设计的.NET控件 适用于C#和VB.NET 能让你从任何TWAIN设备中获取图像的托管代码SDK |
![]() 一款多功能的条码读取控件 只需要几行代码就可以将条码读取功能 嵌入到Web或桌面应用程序 | 快速、轻松地为您的web应用程序 启用图像和视频捕捉 |
![]() 一个用以替代VSS的独立版本控制软件 | ![]() 一款基于SQL Server的本地/网络版本控制软件 |
2017慧都十四周年狂欢搞事情!砸金蛋100%抽现金红包、满额豪送iPhone X、iPhone 8、DevExpress汉化免费送、团队升级培训套包劲省10万元......更多惊喜等您来探索!
var barcodeImage = DWObject.GetImageURL(index, -1, -1);
dbrObject.readURLAsync(barcodeImage,
index,
GetBarcodeInfo,
OnBarcodeReadFailure);
function OnBarcodeReadFailure(sImageIndex, errorCode, errorString) {
console.log(errorString);
}
function GetBarcodeInfo(sImageIndex, result) {//This is the function called when barcode is read successfully
//Retrieve barcode details
var count = result.getCount();
if (count == 0) {
alert("The barcode for the selected format is not found.");
return;
} else {
for (i = 0; i < count; i++) {
Barcode_text = result.get(i).text;
var x = result.get(i).x1;
var y = result.get(i).y1;
var format = result.get(i).formatString;
var barcodeText = ("barcode[" + (i + 1) + "]: " + "\n" + Barcode_text + "\n");
extractInformation();
}
}
}driverLicenseFields = [
{ 'abbreviation': 'DAA', 'description': 'Full Name' }
, { 'abbreviation': 'DAB', 'description': 'Last Name' }
, { 'abbreviation': 'DAB', 'description': 'Family Name' }
, { 'abbreviation': 'DAC', 'description': 'First Name' }
, { 'abbreviation': 'DAC', 'description': 'Given Name' }
, { 'abbreviation': 'DAD', 'description': 'Middle Name or Initial' }
, { 'abbreviation': 'DAD', 'description': 'Middle Name' }
, { 'abbreviation': 'DAE', 'description': 'Name Suffix' }
, { 'abbreviation': 'DAF', 'description': 'Name Prefix' }
, { 'abbreviation': 'DAG', 'description': 'Mailing Street Address1' }
, { 'abbreviation': 'DAH', 'description': 'Mailing Street Address2' }
, { 'abbreviation': 'DAI', 'description': 'Mailing City' }
, { 'abbreviation': 'DAJ', 'description': 'Mailing Jurisdiction Code' }
, { 'abbreviation': 'DAK', 'description': 'Mailing Postal Code' }
, { 'abbreviation': 'DAL', 'description': 'Residence Street Address1' }
, { 'abbreviation': 'DAM', 'description': 'Residence Street Address2' }
, { 'abbreviation': 'DAN', 'description': 'Residence City' }
, { 'abbreviation': 'DAO', 'description': 'Residence Jurisdiction Code' }
, { 'abbreviation': 'DAP', 'description': 'Residence Postal Code' }
, { 'abbreviation': 'DAQ', 'description': 'License or ID Number' }
, { 'abbreviation': 'DAR', 'description': 'License Classification Code' }
, { 'abbreviation': 'DAS', 'description': 'License Restriction Code' }
, { 'abbreviation': 'DAT', 'description': 'License Endorsements Code' }
, { 'abbreviation': 'DAU', 'description': 'Height in FT_IN' }
, { 'abbreviation': 'DAV', 'description': 'Height in CM' }
, { 'abbreviation': 'DAW', 'description': 'Weight in LBS' }
, { 'abbreviation': 'DAX', 'description': 'Weight in KG' }
, { 'abbreviation': 'DAY', 'description': 'Eye Color' }
, { 'abbreviation': 'DAZ', 'description': 'Hair Color' }
, { 'abbreviation': 'DBA', 'description': 'License Expiration Date' }
, { 'abbreviation': 'DBB', 'description': 'Date of Birth' }
, { 'abbreviation': 'DBC', 'description': 'Sex' }
, { 'abbreviation': 'DBD', 'description': 'License or ID Document Issue Date' }
, { 'abbreviation': 'DBE', 'description': 'Issue Timestamp' }
, { 'abbreviation': 'DBF', 'description': 'Number of Duplicates' }
, { 'abbreviation': 'DBG', 'description': 'Medical Indicator Codes' }
, { 'abbreviation': 'DBH', 'description': 'Organ Donor' }
, { 'abbreviation': 'DBI', 'description': 'Non-Resident Indicator' }
, { 'abbreviation': 'DBJ', 'description': 'Unique Customer Identifier' }
, { 'abbreviation': 'DBK', 'description': 'Social Security Number' }
, { 'abbreviation': 'DBL', 'description': 'Date Of Birth' }
, { 'abbreviation': 'DBM', 'description': 'Social Security Number' }
, { 'abbreviation': 'DBN', 'description': 'Full Name' }
, { 'abbreviation': 'DBO', 'description': 'Last Name' }
, { 'abbreviation': 'DBO', 'description': 'Family Name' }
, { 'abbreviation': 'DBP', 'description': 'First Name' }
, { 'abbreviation': 'DBP', 'description': 'Given Name' }
, { 'abbreviation': 'DBQ', 'description': 'Middle Name' }
, { 'abbreviation': 'DBQ', 'description': 'Middle Name or Initial' }
, { 'abbreviation': 'DBR', 'description': 'Suffix' }
, { 'abbreviation': 'DBS', 'description': 'Prefix' }
, { 'abbreviation': 'DCA', 'description': 'Virginia Specific Class' }
, { 'abbreviation': 'DCB', 'description': 'Virginia Specific Restrictions' }
, { 'abbreviation': 'DCD', 'description': 'Virginia Specific Endorsements' }
, { 'abbreviation': 'DCE', 'description': 'Physical Description Weight Range' }
, { 'abbreviation': 'DCF', 'description': 'Document Discriminator' }
, { 'abbreviation': 'DCG', 'description': 'Country territory of issuance' }
, { 'abbreviation': 'DCH', 'description': 'Federal Commercial Vehicle Codes' }
, { 'abbreviation': 'DCI', 'description': 'Place of birth' }
, { 'abbreviation': 'DCJ', 'description': 'Audit information' }
, { 'abbreviation': 'DCK', 'description': 'Inventory Control Number' }
, { 'abbreviation': 'DCL', 'description': 'Race Ethnicity' }
, { 'abbreviation': 'DCM', 'description': 'Standard vehicle classification' }
, { 'abbreviation': 'DCN', 'description': 'Standard endorsement code' }
, { 'abbreviation': 'DCO', 'description': 'Standard restriction code' }
, { 'abbreviation': 'DCP', 'description': 'Jurisdiction specific vehicle classification description' }
, { 'abbreviation': 'DCQ', 'description': 'Jurisdiction-specific' }
, { 'abbreviation': 'DCR', 'description': 'Jurisdiction specific restriction code description' }
, { 'abbreviation': 'DCS', 'description': 'Family Name' }
, { 'abbreviation': 'DCS', 'description': 'Last Name' }
, { 'abbreviation': 'DCT', 'description': 'Given Name' }
, { 'abbreviation': 'DCT', 'description': 'First Name' }
, { 'abbreviation': 'DCU', 'description': 'Suffix' }
, { 'abbreviation': 'DDA', 'description': 'Compliance Type' }
, { 'abbreviation': 'DDB', 'description': 'Card Revision Date' }
, { 'abbreviation': 'DDC', 'description': 'HazMat Endorsement Expiry Date' }
, { 'abbreviation': 'DDD', 'description': 'Limited Duration Document Indicator' }
, { 'abbreviation': 'DDE', 'description': 'Family Name Truncation' }
, { 'abbreviation': 'DDF', 'description': 'First Names Truncation' }
, { 'abbreviation': 'DDG', 'description': 'Middle Names Truncation' }
, { 'abbreviation': 'DDH', 'description': 'Under 18 Until' }
, { 'abbreviation': 'DDI', 'description': 'Under 19 Until' }
, { 'abbreviation': 'DDJ', 'description': 'Under 21 Until' }
, { 'abbreviation': 'DDK', 'description': 'Organ Donor Indicator' }
, { 'abbreviation': 'DDL', 'description': 'Veteran Indicator' }
, { 'abbreviation': 'PAA', 'description': 'Permit Classification Code' }
, { 'abbreviation': 'PAB', 'description': 'Permit Expiration Date' }
, { 'abbreviation': 'PAC', 'description': 'Permit Identifier' }
, { 'abbreviation': 'PAD', 'description': 'Permit IssueDate' }
, { 'abbreviation': 'PAE', 'description': 'Permit Restriction Code' }
, { 'abbreviation': 'PAF', 'description': 'Permit Endorsement Code' }
, { 'abbreviation': 'ZVA', 'description': 'Court Restriction Code' }
]C#
// We assume "C:\Inetpub\wwwroot" is a physical path to the location
// visible from Internet as "http://www.domain.com" (virtual path).
msg.Parser.WorkingFolder = @"C:\Inetpub\wwwroot";
Response.Write(oMsg.GetHtmlAndSaveRelatedFiles("http://www.domain.com", VirtualMappingType.Static,
MessageFolderBehavior.DoNotCreate));
VB.NET
' We assume "C:\Inetpub\wwwroot" is a physical path to the location
' visible from Internet as "http://www.domain.com" (virtual path).
msg.Parser.WorkingFolder = "C:\Inetpub\wwwroot"
Response.Write(oMsg.GetHtmlAndSaveRelatedFiles("http://www.domain.com", VirtualMappingType.Static,
MessageFolderBehavior.DoNotCreate))流行的数据库管理系统(DBMS)Oracle MySQL 中发现了被称为“The Riddle”的编码漏洞,该漏洞允许攻击者利用MiTM(man-in-the-middle,中间人)来窃取用户的用户名和密码等登录凭证。用户请立即更新到5.7版本。
MiTM 攻击(Man-in-the-MiddleAttack)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”。例如SMB会话劫持、DNS欺骗等攻击都是典型的MITM攻击。
Riddle漏洞是Oracle MySQL 5.5和5.6客户端数据库中发现的关键安全漏洞。该漏洞允许攻击者使用‘中间人攻击’来破坏MySQL客户端和服务器之间的SSL配置连接。这个漏洞是一个非常关键的安全漏洞,因为它影响到MySQL(一个非常流行的SQL数据库,SSL连接由其定义安全。)
该漏洞编号为“CVE-2017-3305”,可以潜在地将用户登录凭证暴露给攻击者,当MySQL客户端5.5和5.6将这些用户凭证信息发送到服务器时,攻击者就能够顺利捕获它们。
针对5.5.49和5.6.30版本发布的安全更新无法完全解决这一安全漏洞。5.7及更高版本以及MariaDB系统不受该安全问题的影响。

根据安全研究人员 Pali Rohár 所言,他们曾经尝试利用影响MySQL数据库的BACKRONYM漏洞的修补方式来修复Riddle漏洞,但是结果失败了。Backronym漏洞也同Riddle漏洞一样,允许攻击者运行中间人攻击来窃取用户登录凭证,即使流量已经被加密也无法阻止。
MySQL 5.5.49以及5.6.30 稳定版的安全更新包括在验证过程完成后添加安全参数的验证。因为验证完成后,攻击者可以使用中间人攻击与 SSL 降级攻击来窃取用户的登录数据,以便立即进行身份验证并登录 MySQL 服务器,可笑的部分是,MySQL 客户端不会在MySQL服务器拒绝验证用户时报告任何与 SSL 问题相关的错误,而是报告服务器发送的未加密的错误信息。此外,当中间人攻击处于活跃状态时,错误信息可以由攻击者控制。
安全专家建议用户尽快将客户端软件更新到MySQL 5.7 或 MariaDB,因为这些应用程序的安全更新正在正常运行,未受该安全漏洞影响。需要注意的是,这个漏洞虽然早在今年2月份就已经发现了,但是目前仍然在影响Oracle MySql软件。
如果你不是Oracle 用户,那么你对他们报告安全漏洞是无用的(即使确实是与安全相关的漏洞)。他们可以完全无视这些安全报告,甚至希望任何人都不要知道这些报告和漏洞的存在,所以至此他们都没有对漏洞进行修复。所以,立即向用户公开披露这些安全漏洞看来是最有效的解决方案,因为这样可以让用户知道一旦受影响应该做什么,有效的保护用户数据安全。
试用、下载、了解更多产品信息请点击"咨询在线客服"














C#: Pop3 pop = new Pop3(); |
VB.NET: Dim pop As Pop3 = New Pop3() |
C#: pop.Connect("mail.domain.com"); |
VB.NET: pop.Connect("mail.domain.com") |
C#: pop.Connect("127.0.0.1"); |
VB.NET: pop.Connect("127.0.0.1") |
C#: pop.Login("login", "password"); |
| VB.NET: pop.Login("login", "password") |
C#: MailMessage msg = pop.DownloadEntireMessage(pop.InboxMessageCount); |
| VB.NET: Dim msg As MailMessage = pop.DownloadEntireMessage(pop.InboxMessageCount) |
C#: pop.Disconnect(); |
| VB.NET: pop.Disconnect() |
C#: using System; using MailBee; using MailBee.Pop3Mail; using MailBee.Mime; namespace EmailApp { class Class1 { [STAThread] static bool IsNewMessage(string UID) { return true; } static void Main(string[] args) { Pop3 pop = new Pop3(); try { pop.Connect("mail.domain.com"); pop.Login("login", "password"); Console.WriteLine("Successfully logged in."); } catch(MailBeePop3LoginNegativeResponseException) { Console.WriteLine("POP3 server replied with a negative response at login."); } string[] arrIDs = pop.GetMessageUids(); int n = pop.InboxMessageCount; if (IsNewMessage(arrIDs[n])) { MailMessage msg = pop.DownloadEntireMessage(n); if (msg.BodyHtmlText != "") Console.WriteLine(msg.BodyHtmlText); else if (msg.BodyPlainText != "") Console.WriteLine(msg.BodyPlainText); else Console.WriteLine("The body of this message is empty."); } try { pop.Disconnect(); Console.WriteLine("Disconnected successfully."); } catch { Console.WriteLine("Disconnection failed."); } } } } |
| VB.NET: Imports System Imports MailBee Imports MailBee.Pop3Mail Imports MailBee.Mime Namespace EmailApp Class Class1 _ Shared Function IsNewMessage(ByVal UID As String) As Boolean Return True End Function Shared Sub Main(ByVal args() As String) Dim pop As Pop3 = New Pop3() Try pop.Connect("mail.domain.com") pop.Login("login", "password") Console.WriteLine("Successfully logged in.") Catch Console.WriteLine("POP3 server replied with a negative response at login.") End Try Dim arrIDs() As String = pop.GetMessageUids() Dim n As Integer = pop.InboxMessageCount If IsNewMessage(arrIDs(n)) Then Dim msg As MailMessage = pop.DownloadEntireMessage(n) If msg.BodyHtmlText <> "" Then Console.WriteLine(msg.BodyHtmlText) Else If msg.BodyPlainText <> "" Then Console.WriteLine(msg.BodyPlainText) Else Console.WriteLine("The body of this message is empty.") End If End If End If Try pop.Disconnect() Console.WriteLine("Disconnected successfully.") Catch Console.WriteLine("Disconnection failed.") End Try End Sub End Class End Namespace |
