2014-04-10 16 views
10

java.util.prefs.Preferences işlevleriyle (Windows 8'de Java 8'de) çalışıyorum. Ve Windows Kayıt Defterine yeni anahtarlar yazabileceğim çalışır. Bu nedenle, Preferences.systemRoot() yöntemini sistem için Tercihler nesnesini kullanmak için kullanıyorum ve Windows Kayıt Defteri'nde bir düğüme eşlenen Tercihler nesnesini almak için node() yöntemini kullanın. Ve iyi şeyler yaratıyor.Java'da, WindowsPreferences neden büyük harfler için eğik çizgileri kullanıyor?

Düğüm için kullanıyorum anahtar, tüm büyük harfleri ("RBI") bir dizedir. Windows Kayıt Defteri'ndeki düğüme baktığımda, adında eğik çizgilerle "/ R/B/I" olarak geliyor.

Bunun garip olduğunu düşündüm, bu yüzden biraz kazdım ve bunun kasıtlı olduğu anlaşılıyor. Windows ortamında (java.util.prefs.WindowsPreferences) Tercihlerin uygulanmasını sağlayan sınıfı buldum ve yöntem windows kayıt defterine gönderilen değerleri oluşturmak için kullanılan bir statik yöntem toWindowsName olduğunu. Bunun için JavaDoc'u .... yılında

/** 
* Converts value's or node's name to its Windows representation 
* as a byte-encoded string. 
* Two encodings, simple and altBase64 are used. 
* <p> 
* <i>Simple</i> encoding is used, if java string does not contain 
* any characters less, than 0x0020, or greater, than 0x007f. 
* Simple encoding adds "/" character to capital letters, i.e. 
* "A" is encoded as "/A". Character '\' is encoded as '//', 
* '/' is encoded as '\'. 
* The constructed string is converted to byte array by truncating the 
* highest byte and adding the terminating <tt>null</tt> character. 
* <p> 
* <i>altBase64</i> encoding is used, if java string does contain at least 
* one character less, than 0x0020, or greater, than 0x007f. 
* This encoding is marked by setting first two bytes of the 
* Windows string to '/!'. The java name is then encoded using 
* byteArrayToAltBase64() method from 
* Base64 class. 
*/ 

Yani, Basit kodlama, büyük harflerle, bir eğik çizgi katacak.

Bunun neden gerekli olduğunu bilen var mı? Kayıt Defterinin büyük/küçük harfe duyarlı değerlerle başa çıkabileceğini düşünmüştüm, ama bu bunu yapamayacağını gösteriyor mu?

Bu konuda çalışabilirim, bunun neden yapıldığını merak ediyorum.

+0

Adlandırma şemasını büyük/küçük harfe duyarlı hale getirmeye çalışıyorlar. –

+0

Kabul edildi, ancak RegEdit'i kullanarak Büyük/küçük harfe duyarlı dizeleri girebiliyorum (orada bol miktarda var). Ve diğer araçları kullanarak o seçenek vardı. Belki de en sonunda kullanılan yerel yöntemlere yapılan çağrılarla ilgili bazı geçici çözümlerdir. – EdH

+0

Dize, bir bayt dizisi olarak kodlanmış gibi görünüyor. Hangisi iyi? Şimdi, bunu yapmanın tek sebebi (bu son dört kelime önemli olan) bunu yapmak için alt ve büyük harflerin farklı bayt değerlerine sahip olmamanız olurdu. Fakat yine de, bildiğim kadarıyla, küçük harf ve büyük harflerin farklı bayt değerleri vardır. Yani, gerçekten gerekli değil mi? – EdH

cevap

11

Senin kadar meraklı olduğunu ve şu açıklamayı buldum:

Sicil-Tuşlar harf koruyarak, ama harf duyarsız. Örneğin, bir "Rbi" anahtarınız varsa "RBi" adında başka bir anahtar yapamazsınız. Dava kurtarıldı, ancak yok sayıldı. Sun'ın duyarlık duyarlılığı çözümü, tuşa eğik çizgi eklemekti.

Kayıt defteri değerleri, büyük/küçük harfe duyarlıdır (ve tabiki, durum koruma). Sun'ın slashleri ​​değerlere de eklemenin niyeti olduğunu sanmıyorum, fakat bir şekilde kodun içine düştü. Bana öyle geliyor ki, bu böcek uzun zamandır bulunamadı. Hata keşfedildiğinde, birçok sistem zaten yanlış uygulamaya bağımlıydı, bu yüzden uyumluluğu korumak için hiçbir zaman çıkarmadı.

Kayıt defteri değerlerinizdeki eğik çizgileri beğenmezseniz, ilginizi çekebilir this implementation.

İlgili konular