30 Mart 2016 Çarşamba

XWPFDocument Sınıfı

Giriş
Bu sınıf .docx belgeleri için kullanılır.

constructor
Şöyle yaparız.
XWPFDocument document = new XWPFDocument(inStream);


WebServiceClient Sınıfı

Giriş
wsimport aracı ile wsdl'den dosyaları ürettikten sonra @WebService ve @WebServiceClient olarak işaretli iki dosya mevcuttur. @WebServiceClient olarak işaretli nesneyi yaratıp metodunu çağırırız.
WebServiceClient client = new WebServiceClient();
AnswerType answer = client.GetSoap().theMethodYouWantUse(some_parameters);
Eğer arayüz üzerinden gitmek çağrı yapmak isterse şöyle yaparız.
HelloWorldImplService helloService = new HelloWorldImplService();
HelloWorld hello = helloService.getHelloWorldImplPort();


JWS Anatasyonları

Standalone Deployment
Endpoint.publish metodu kullanılır.

@WebService
Şu satırı dahil ederiz.
import javax.jws.WebService;
Şöyle yaparız.
@WebService(serviceName="MyWebService",
            portName="MyWebServicePort",
            endpointInterface="com.abc.MyWebService",
            targetNamespace="http://abc.com")
public class MyWebService implements MyWebServiceInterface {...}


22 Mart 2016 Salı

JPA @Entity Anotasyonu

Giriş
Şu satırı dahil ederiz.
import javax.persistence.Entity;
Bir sınıfın JPA ile kullanılabilmesi için @Entity ile işaretlenmesi gerekir.
@Entity
public class MyEntity {
...
}
Hibernate İle Kullanımı
Bir çok JPA sağlayıcısı, JPA ile gelmeyen diğer özellilkler de sunar. Bu özellikler kullanılabilir.
@Entity
@org.hibernate.annotations.Entity(optimisticLock=OptimisticLockType.ALL)
public class MyEntity implements Serializable {
...
}
Entity Sınıfı No-Arg Constructor
Entity sınıfı public veya protected bir no-arfg constructor'a sahip olmalıdır.
  • The entity class must have a no-arg constructor. It may have other constructors as well. The no-arg constructor must be public or protected.
  • The entity class must a be top-level class. An enum or interface must not not be designated as an entity.
  • The entity class must not be final. No methods or persistent instance variables of the entity class may be final.
  • If an entity instance is to be passed by value as a detached object (e.g., through a remote interface), the entity class must implement the Serializable interface.
  • Both abstract and concrete classes can be entities. Entities may extend non-entity classes as well as entity classes, and non-entity classes may extend entity classes.
Entity Sınıfı final olmamalıdır.
Bu örnek yanlıştır.
@Entity
public final class MyEntity {
    ...
}










Kripto

SecretKeyFactory Sınıfı
SecretKeyFactory Sınıfı yazısına taşıdım.

KeyGenerator Sınıfı
getInstance metodu
Belirtilen kripto için nesne döndürür.
KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
generateKey metodu
Key nesnesi üretir.
KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
SecretKey myDesKey = keygenerator.generateKey();
SecretKeySpec
Constructor
Şöyle yaparız.
byte[] keyBytes = ...;
SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(keyBytes);
Bir string ile şöyle yaparız.
String secretKey = "0123456789abcdef";
SecretKeySpec keyspec = new SecretKeySpec(SecretKey.getBytes(), "AES");
IvParameterSpec
Bu sınıfı bir initialization vector sağlar. CBC modundaki cipher'larda kullanılır.
Constructor
Şöyle yaparız.
byte[] ivBytes = ...;
IvParameterSpec ivParameterSpec = new IvParameterSpec(keyBytes);
Bir string ile şöyle yaparız.
String iv = "fedcba9876543210";
IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
Cipher Sınıfı
Cipher Sınıfı yazısına taşıdım.

CipherOutputStream Sınıfı
Normal bir stream gibi kullanılır. write() flush() metodları vardır. Her stream'de olduğu gibi close() ile kapatılır
Constructor
Şöyle yaparız.
Cipher cipher = ...;
FileOutputStream fos = ...;
CipherOutputStream cos = new CipherOutputStream(fos, cipher);



Bit İşlemleri

Java'da Sayılar Unsigned Değildir
Özellikle C++'tan gelenlerin sıkça yaptığı bir hata. 32 bit sayıların kaydırılması için 64 bit kullanılır. Örneğin aşağıdaki kodda 1 signed bir değişken olduğu için istediğimiz sonucu elde etmeyiz.
938372878L | (1 << 31) //results to -1209110770
Şöyle yapmak gerekir.
938372878L | (1L << 31)
Faydalı metodlar
Java'da bitmask ile çalışmak yerine daha kolay metodlar var. highestOneBit, lowestOneBit, numberOfLeadingZeros, numberOfTrailingZeros gibi. Örnek:
assert 64 == Integer.highestOneBit(65);//00000000000000000000000001000001
assert 2 == Integer.bitCount(65);
assert 6 == 31 - Integer.numberOfLeadingZeros(65);//31 - 25
BitSet SınıfıBitSet sınıfı bitlerle uğraşmayı biraz daha kolaylaştırıyor. Bu sınıf dinamik olarak büyüyebilir.
BitSet bits = new BitSet();
for (int i = 0; i < 10; i++) {
  if (!bits.get(i)) {
    bits.set(i,true);
  }
}
BitSet sınıfı bitleri bir long dizisi şeklinde saklar.
 /**
 * The internal field corresponding to the serialField "bits".
 */
 private long[] words;
length ve size metodları
length() mantıksal uzunluğunu verir. size ise sınıf içinde kaç bit harcandığını verir.  size() sonucu long [] için hep 64 bit ve katı olacaktır.
long currentTimeMillis = System.currentTimeMillis();
BitSet bitSet = BitSet.valueOf(new long[]{currentTimeMillis});
System.out.println("Bitset length: " + bitSet.length());
System.out.println("Bitset size: " + bitSet.size());
Çıktı olarak şunu alırız.
Bitset length: 41
Bitset size: 64
toByteArray metodu
Şöyle yaparız.
bitSet.toByteArray();
valueOf metodu
Şöyle yaparız.
byte b = ...;
BitSet bitSet = BitSet.valueOf(new byte[] { b });










20 Mart 2016 Pazar

Audio

Giriş
Diskteki bir dosyayı çalmak için iki seçenek var. İlki javax.sound altındaki sınıfları kullanmak. İkincisi ise Java 7 ile gelen MediaPlayer

AudioInputStream Sınıfı
getFormat metodu
Şöyle yaparız.
AudioInputStream audioStream =...;
AudioFormat format = audioStream.getFormat();
Audio System Sınıfı
AudioSystem Sınıfı yazısına taşıdım.

DataLine.Info Sınıfı
constructor metodu
Şöyle yaparız.
AudioFormat format = audioStream.getFormat();
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
Mixer.Info Sınıfı
getName ve getDescription metodları
Şöyle yaparız.
Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo();
for(int i = 0; i < mixerInfo.length; i++)
{
  Mixer.Info info = mixerInfo[i];
  System.out.println(String.format("Name [%s] \n Description [%s]\n\n",
   info.getName(), info.getDescription()));
}
SourceDataLine Sınıfı
Ses çıkarma işlemini gerçekleştiren sınıftır. Yazılan veriyi çalar.

constructor
Şöyle yaparız.
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
SourceDataLine sdl = (SourceDataLine) AudioSystem.getLine(info);
close metodu
Şöyle yaparız.
sdl.close();
drain metodu
Şöyle yaparız.
sdl.drain();
open metodu
Şöyle yaparız.
AudioFormat format = ...;
SourceDataLine sdl = ...;
sdl.open(format);
start metodu

Şöyle yaparız.
audioLine.start();
write metodu
Şöyle yaparız.
int BUFFER_SIZE = 4096;
byte[] bytesBuffer = new byte[BUFFER_SIZE] = ...;
sdl.write(bytesBuffer, 0, BUFFER_SIZE);
Beep sesi çıkarmak için şöyle yaparız.
import javax.sound.sampled.*;
public class Sound
{
    public static float SAMPLE_RATE = 8000f;
    public static void tone(int hz, int msecs) 
    throws LineUnavailableException 
    {
        tone(hz, msecs, 1.0);
    }

    public static void tone(int hz, int msecs, double vol)
    throws LineUnavailableException 
    {
        byte[] buf = new byte[1];
        AudioFormat af = new AudioFormat(SAMPLE_RATE,8,1,true,false);     
        SourceDataLine sdl = AudioSystem.getSourceDataLine(af);
        sdl.open(af);
        sdl.start();
        for (int i=0; i < msecs*8; i++) {
              double angle = i / (SAMPLE_RATE / hz) * 2.0 * Math.PI;
              buf[0] = (byte)(Math.sin(angle) * 127.0 * vol);
              sdl.write(buf,0,1);
        }
        sdl.drain();
        sdl.stop();
        sdl.close();
    }

    public static void main(String[] args) throws Exception {
        Sound.tone(15000,1000); 
    }
}

MediaPlayer Sınıfı
play metodu
Örnek :


String bip = "bip.mp3";
Media hit = new Media(bip);
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();