30 Kasım 2016 Çarşamba

Clip Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.sound.sampled.Clip;
constructor
Şöyle yaparız.
Clip clip = AudioSystem.getClip ();
addLineListener metodu
Şöyle yaparız
clip.addLineListener(new LineListener() {
  @Override
  public void update(LineEvent event) {
    if (event.getType() == LineEvent.Type.STOP)
      clip.close();
  }
});
loop metodu
Şöyle yaparız.
clip.loop (Clip.LOOP_CONTINUOUSLY);
open metodu
Belirtilen AudioInputInputStream'i açar. Şöyle yaparız.
AudioInputStream inputStream = ...;
clip.open (inputStream);
start metodu
Şöyle yaparız
clip.start();

JavaCompiler Sınıfı

getStandardFileManager metodu
Şöyle yaparız.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = 
  new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(
            diagnostics, null, null);
getTask metodu
Şöyle yaparız.
StandardJavaFileManager fileManager = compiler.getStandardFileManager(
            diagnostics, null, null);
Iterable<? extends JavaFileObject> compilationUnits = fileManager
            .getJavaFileObjectsFromStrings(Arrays.asList("foo.java"));
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager,
            diagnostics, null, null, compilationUnits);
boolean success = task.call();


ToolProvider Sınıfı

getSystemJavaCompiler metodu
Şöyle yaparız.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();


Float Sınıfı

parseFloat metodu
Şöyle yaparız.
string str = ...;
Float f = Float.parseFloat (str);

29 Kasım 2016 Salı

AudioSystem Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.sound.sampled.AudioSystem;
getAudioInputStream - File
Şöyle yaparız
AudioInputStream inputStream = AudioSystem.getAudioInputStream(
  new File("C:\\a.wav"));
getAudioInputStream metodu - InputStream
Çalmak için bir stream yaratır. Şöyle yaparız.
DataInputStream dis = ...
AudioInputStream inputStream = AudioSystem.getAudioInputStream(dis);
Şöyle yaparız.
AudioInputStream inputStream = AudioSystem.getAudioInputStream(
 Main.class.getResourceAsStream(Constants.SOUND_ALERT));
getClip metodu
Clip nesnesi döner. Clip nesnesi verilen AudioInputStream'i çalar. Şöyle yaparız.
Clip clip = AudioSystem.getClip();
Belli bir mixer için Clip nesnesini şöyle alırız.
Mixer.Info info = ...;
Clip clip = AudioSystem.getClip (info);
getMixerInfo metodu
Sistemdeki Mixer'leri verir. Şöyle yaparız.
Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo();
getSourceDataLine metodu
Şöyle yaparız.
float SAMPLE_RATE = 8000f;
AudioFormat af = new AudioFormat(SAMPLE_RATE,8,1,true,false);     
SourceDataLine sdl = AudioSystem.getSourceDataLine(af);

JPA ManyToMany İlişki

ManyToMany
Şu satırı dahil ederiz.
import javax.persistence.ManyToMany;
ManyToMany unidirectional veya bidirectional olabilir deniliyor. Unidirectional olmasının mantığını anlamadım. Ayrıca sıra da önemli olabilir.

Veri Yapısı
ArrayList, Set kullanılabilir. Alanın ilklendirilmiş olması gerekir.
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="USER_VEHICLE",
           joinColumns=@JoinColumn(name="USER_ID"),
           inverseJoinColumns=@JoinColumn(name="VEHICLE_ID"))
Collection<Vehicle> vehicle = new ArrayList<>();

Ara Tablo
ManyToMany'de 3 tablo kullanılır.

A -> Ara Tablo -> B.
A ve B tablolarını birleştirmek için bir ara tablo yani JoinTable kullanılır. JoinTable'da iki tane Foreign Key alanı vardır.

A sınıfı şöyle olsun
@Entity
public class A {

  @Column(name = "a_id")
  String id;
  
  @ManyToMany(targetEntity = B.class,
              cascade = { CascadeType.PERSIST, CascadeType.MERGE })
  @JoinTable(name = "at",
             joinColumns = @JoinColumn(name = "a_id"),
             inverseJoinColumns = @JoinColumn(name = "b_id"))
  Set<Report> bSet;
}
joinColumn A tablosundaki id alanıdır.
inverseJoinColumn ise B tablosundaki id alanıdır.

B sınıfı şöyle olsun. Ya da şöyle olsun
@Entity
public class B {
  @Column(name = "b_id")
  String id;

  @ManyToMany(mappedBy = "bSet")
  Set<A> aSet;

}
Set yerine list kullanılabilir.

java.sql.Date Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.sql.Date;
Bu sınıf sadece tarih bilgisini saklar. Saat bilgisini saklamaz.

constructor - default
Şöyle yaparız. Saat, dakika, saniye bilgisini kaybederiz.
java.util.Date sqlDate = new java.util.Date ();
constructor - long
Şöyle yaparız.
java.util.Date now = new java.util.Date ();
java.sql.Date sqlDate = new java.sql.Date (now.getTime());
Şöyle yaparız.
java.sql.Date sqlDate = new Date (0);
getTime metodu
Şöyle yaparız.
java.sql.Date sqlDate = new java.util.Date (sqlDate.getTime())
toInstant metodu
Bu metod exception atar.
This method always throws an UnsupportedOperationException and should not be used because SQL Date values do not have a time component.
toLocalDate metodu
Şöyle yaparız.
LocalDate date = sqlDate.toLocalDate();

ObjectInputStream Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.io.ObjectInputStream;
Header
ObjectInputStream verinin başına 4 byte yazar. İlk iki byte magic number, diğer iki byte ise stream version değeridir.

Veri Formatı
ObjectInputStream kendi içinde 1024 byte uzunluğunda bir bellek alanı bulundurur. Bu bellek Data + Block Data Marker alanına kadar okumak için yeterlidir.

Aşağıdaki kodda 4000 byte uzunluğunda bir dizi dosyaya yazılıyor. Daha sonra biner byte olarak okunuyor.
FileOutputStream output = new FileOutputStream("test.txt");
ObjectOutputStream stream = new ObjectOutputStream(output);

byte[] bytes = new byte[4000];

stream.write(bytes);
stream.close();

FileInputStream input = new FileInputStream("test.txt");
ObjectInputStream s = new ObjectInputStream(input);


byte[] buffer = new byte[1000];
int read = s.read(buffer);

while (read > 0) {
    System.out.println("Read " + read);
    read = s.read(buffer);
}

s.close();
Çıktı olarak şunu alırız. Sebebi ise Block Data Marker'a kadar okunacak şekilde ayarlanması.
Read 1000
Read 24
Read 1000
Read 24
Read 1000
Read 24
Read 928
constructor
Bir InputStream alır. Şöyle yaparız.
File file = new File("out.dat");
ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
readObject metodu
Okuma örneği. Exception'ları dikkate almadım
MyObject o = (MyObject) in.readObject();